00:00
接下来下一类运算符,我们要介绍的是关系型运算符,这类运算符也叫做比较运算符啊呃,那它整体来讲就是是一个二元运算符,主要连接左右两个值或者两个变量或者两个表达式,要判断的就是它们之间的大于小于等于的关系啊,那所以它其实就是最终得到的其实就是一个true false的布尔类型的结果啊,那所以呃,当前我们这个运算符的使用和Java里边也是非常相似啊呃,关于等于,那当然就是两个等号,双等号表示逻辑上的一个相等的判断,比方说我们这里边四。等于三啊,那么它最终我们判断四是不等于三的,所以它的返回值就是一个false布尔类型的false,那或者如果要是判断它是否是不相等的话,那我们用的是感叹号加一个等号,这个表示不相等的意思,如果是四不等于三的话,这个表达式它的结果就是处啊,它是对的啊,它是真的,那同样呢,我们还可以有小于大于小于等于大于等于,这个用法基本上跟Java里边都是完全一致的,那这里面大家需要考虑的是我们在使用这个其他的一些关系运算符,其实都没什么区别啊,关键就在于这个相等的判断。
01:25
那如果说数值的相等判断,这个非常的简单,是那四和三做判断啊,那当然是不相等的啊,如果是相等的话,就是返回结果是false,但是有一些场景呢,我们要判断的可能不是一个简单的值这样的一个类型,我们有时候判断的可能是某一种引用类型,那这个时候我们要判断它是否相等,到底比较的是什么呢?哎,这个其实在Java里边我们曾经是有这样的一些经验的,就是如果我们当前是值类型的话,那当然直接判断它的值是否相等,如果要是引用类型的话,那其实在Java里边这个相等符号,我们比较的是对象的内存地址,或者说它的那个引用地址,所以如果说我们当前对象的内容一样,但它是不同的对象,它的引用不一样的话,那其实相等最后返回的也是false。
02:21
而在skyla里边呢,这一部分发生了一些变化啊,那到底是什么样的变化,我们还是在代码里边来给大家做一个解释啊,那首先我们还是先回顾一下Java啊,所以先在Java下边新建一个Java类,我们来对应的做一个测试,Test operator。我们把这个没方法写出来,那这里边主要我们要测试的其实就是这个比较运算符了啊,那测试这个比较运算符的话,我们关键就。考察一下对应的这个引用类型,那比方说他最见的最多的其实就是string的比较啊,那或者说大家想要去你有一个类的对象也是可以的啊,我们这里边直接用string,这个看的更明显一点,比方说我在这里直接定义一个S1,它本身是一个塔啊,那其实大家知道这当前是一个字符常量啊啊,它是一个字符串类型STRING1,然后接下来呢,我再定义一个S2,也是一个string,是呢,我不是跟用这个字符常量直接把它定义出来的,而是new一个string的对象。
03:34
Hello,知道在new的时候,我可以直接传入里边的内容,那其实大家想到啊,当前的S1和S2,其使它的内容都是哈,而且也都是一个string。但是他俩会是相等的吗?诶,这里我们就要考察了,我们这里边可以定义一个板类型的变量,就是is e口S1,我们判断它相等等于S2,好,接下来我们可以它做一个打印输出,看一看这个easy e到底是true还是false。
04:20
我们看的很明显,当前的判断它是false,因为这就是我们所提到的啊,在Java里边,如果直接用这个相等符号去判断这个引用类型的话,看它是否相等的话,那判断的是它的引用地址,那当前我们一个是一个字符常量,呃,然后另外一个是我们又了一个string的对象,那尽管它里边的值都是hello,但是显然这两个是不同的对象,它的地址是不一样的,哎,那所以这里边当然最后EE口的结果就是false。那怎么样在Java里边能判断它里边的内容呢?呃,这个其实大家也也知道啊,我们如果要想判断它的内容的话,那其实是应该要用另外一种方式来做判断,那就是用不是有一个方法叫做equals啊,如果调用当前对象的equals方法,然后传入另外一个S2这个判断的话,当前输出的其实就是判断他们具体的内容了,那这里面当然输出的就是处了。
05:22
这是Java里面的用法,那现在在SKY里边是不是也是这样呢?哎,其实大家会发现啊,这个JA抓Java里边的这种用法,其实是容易让人产生容易产生这种呃混混淆和疑惑的,因为我本来就认为这个相等判断,这不就是ES吗?不就是相等吗?哎,但是你直接这么判断的时候,结果它返回的是false,它认为他们俩是不同的引用啊,然后这里边你调equals的时候,这个时候才判断的是内容,所以在skyla的设计里边,它直接对于这个特别是字符串的应用啊,它直接把这种混淆就去掉了,所以接下来我们看一下第二类。
06:05
比较运算符,我们重点判断这个相等的运算符。我们可以同样定义一个S1STRING类型。我们在这儿定义一个hello,同样S2STRING类型又一个string,大家知道这个在diva里边可以直接去只用调用这个Java里边的类库嘛,所以这里边的这个string其实看到啊,这里边我们用到的还是Java里面的这个string啊,那或者大家看到Di里边也有这个string定义对吧?啊,但是大家看它的这个类型string其实就是Java里面的这个string啊,所以当前我们用的还是Java里面的string,同样把这个定义出来,那接下来这两个S1和S2是否相等呢?那我们直接print来把它做一个判断。
07:03
直接运行,接下来我们就看的非常的明显,它其实直接就是相等的啊,所以在skyla里边字符串啊,这个类型直接做这个相等判断,它其实。已经直接就是类似于我们调用了ES方法,假如说这里啊,大家看我们调用这个S一点。E口子X2的话,这里直接输出的也是一个处啊,所以它俩其实是完全等价的,这样我们就不会有疑惑了啊,判断的都是内容,不再去判断它的引用了,那有同学可能会想到,那呃,难道说我在SKY拉里面就不能去判断两个对象的引用地址是否相等了吗?哎,这个也是可以的,只不过这种用法用的比较少,我们一般不太常用,哎,那所以SC里边呢,就用另外一个方法,保留了我们判断引用地址是否相等的这个,呃,这样的一种需求啊,所以这种判断是什么样呢?刚才其实我们在敲的时候,大家也已经看到了,我另外的一种方法叫做叫做EQ,是ES,而是叫做EQ,那么。
08:15
这个时候调用的时候,它所判断的就是当前的S1和S2的引用地址是否相等,这个时候它输出的是false。这就是关于skyla里边对于相等运算符啊,呃,特别是对于引用类型,到底是判断地址还是判断内容的一个具体的说明啊,那当然了,就是关于我们这里边的使用,其实啊,对于这个skyla的代码里边,这里边的这个相等,后面我们也会提到,它本身底层其实也是一个方法调用。Scla的语法里边,它是把这个相等啊,其实就直接实现,就是直接用这个equals做了一个实现啊,那所以如果大家要是说想要判断scla里面的两个对象是否内容相等,那其实就相当于你直接把这个equals直接实现了,这个方法只要重写了,那对应的这个相等符号,我们直接判断就是内容了,但是如果说有一些你自己定义的类型里边没有重写它的equals方法的话,那当然也还是判断不出来的,这一点大家需要额外注意一下,这就是关于比较运算符的一个说明。
我来说两句