00:00
来,那咱们继续再往下第五个。第五个方法呢,我们找啊。呃,Equals还用,还用我们说吗?各位,Equals还用我们说吗?啊,比较字符串用ES。比较是否相等吗?对吧。这不用了吧。但它也属于掌握啊,掌握。比较两个字符串必须使用E口方法。不能使用双等号啊。啊,有啥区别,你看下源码吧,看啊源码你看点过去,点过去源码啊。嗯,源码来看看。嗯,比较。比较。比较。一。这你现在还还还还说明不了一个问题,我说一下啊,呃,这个比较啊,它底层实际上啊,我们看一下ES吧,这样我看equals啊各位。
01:07
Compare to和equals,看equals有没有调compare to方法行吧。看他底层这个equals方法有没有掉啊,Equals方法有没有调用什么呀,Compare to方法。我觉得兰芳学的不错啊,这个地方应该是是是是是有这个疑问的啊,有这个疑问的compare to和这个equals,因为compare to呢,比较两个字符串的时候,它最后如果相等的话,返回的是零是不是,哎,那么这块这个E口方法呢,它它掉没掉呢?哎,我们可以看看字符串abc.e什么呀,AABC,那么这个时候我们可以点过去方法来看一下它底层,呃,掉没掉,这个方法各位哎,有。这看不出来是吧。这儿。进去进去这个这不equals吗?是一个string equals吧,我说一下各位啊。你看这另请参见,是不是to啊。对吧,说你这个equals方法另请参见方法。哎,有意思啊,点过去看看。
02:02
嗯。它不是原先的那个老的老的那个JDK啊,这个新的JDK这块的话,它没有掉compare to方法,它以以前是掉的,以前是掉的,看看这里有没有。看看这个compact string。这个常量,这是个常量。嗯,再点一下。啊,这是equals,只是在这儿说了,另请参见compare to。是不是,但是这里好像没掉compare方法掉了吗?首先先说是它是一个是否这个。对象是否是一个死是吧?如果是的话,强转。转完之后的话,它掉了这个。拉丁一字符集的一个工具叫ES,把一个value,这个value就是我们当前字符串,而后边这个a string就是a string就是它呗,是吧,A string的value就是把两个字符块传进去了,传进之后呢,这个异构放底层怎么调呢看看。
03:06
首先,如果它的长度相等,各位长度相等。再继续往下走,如果长度不相等,就是直接return false了是不是?然后再紧接着是for循环,I等于零,I小于Y6.lesi加加,然后value I是不是和other I,如果是不相等的话,就返回false,其他情况返回true。好,这个地方并没有去调compare to方法,各位啊,没有去调,但是你看一看老版本的吧,我印象当中老版本里面调compare to方法了啊,调compare to方法了,但是这是没调。这没掉啊,大家看这里没掉,这个代码能看懂吧。各位,这个代码能看懂吗?你看啊,这个abc.e是不是ABC点过去吧。是不是好,这个E方法能看明白吗。首先它内存地址一样的话,怎么着,Return to吧。这个没毛病吧。
04:00
然后继续往下。如果N。这个object,这个如果它是一个字符串的话,我们是不是才有必要。如果不是一个字符串的话,是不是return?对不对,好,那是字符串是不是就转成字符串,转完字符串之后,是不是接下来在这进行判断呀。对吧,啊,这个判断你不用管它是什么意思啊,然后紧接着他就走完return一个什么呀,拉丁一的equals这个value。这个value实际上说的是谁?说的是。这个它底层实际上是一个。数组。这个string啊,它底层实际上是个数组。这个value。是一个实例变量。你看这个equals。是不是这这个value啊,这个value是不是就是那个当前字符串啊。什么意思?这个Y就是ABC,你这个abc.e的话。
05:01
你这个value就是ABC。然后你调这个方法的时候,你是不是传了个ABC。对吧,那你这个ABC是不是付给了他。对吧,啊。那他这边是不是转成a string了,那a string.value是不是还是一个bad数组啊?A string.value嘛,这是个字符串,点value嘛,它是个BY数组,前面是不是也是个BY数组啊,然后点E方法点过去大家看这个是个BY数组,这是个另外一个BY数组,这个badt数组说的是谁?就是这个ABC转成的badt数组,然后你后边这个bad数组是谁?说的是你这个ABC转成这个badt数组,然后接下来对这个BAT数组进行循环变历。对吧,但是前提是你前面这个bed数组的长度如果和你后边这个bed数组长度相等的情况下,才有必要进行判断,如果这个长度根本就不一样,那直接return false就行了。那如果长度相等的情况下,还一个一个比啊,For循环循环遍离这个bad数组啊,从这个bad数里边取出一个一个值,你看value这个数组下标为I和这个other这个数组它的下标为I的元素进行比较,如果只要是不相等,Return false,如果这个return for不执行,最后执行return处就表示两个字符块相等啊是不是?所以这个从原代码上看啊,这个JDK13这个版本啊,它改进了一下啊,用一个数组的方式进行比较,但是在老版本里面,JDK8呀,JDK7呀,JDK6啊里边它调的是compare to方法。
06:27
啊,方法啊。好了,那这块的话就说到这儿吧,各位啊,这个结果是什么呀?ES方法有没有调卡方法啊,注意这个老版本可以看看啊,老版本可以看一下啊呃,新的版本没有啊,新的就是JDK13啊,我看了一下GDK13中并没有调用什么呀,Compare to方法啊。呃,但是呢,我们也可以研究一下compare two,可以研究一下compare two啊, controlf12compare two源代码compare to比较好,大家看这个比较啊,比较字符串,呃,这边有没有调compare to。
07:13
这个compare to,调到这个compare to,这个compare to,呃,再往下走,走的是这个代码。是吧,那走的是这个代码啊,还是不一样还是不一样啊,行吧,咱们先不用研究了,现在看这个代码有点有点费劲,现在各位啊。先不用看了,Equals这个结果是触版。是不是啊,来运行一下。判断两个字符串是否相等啊,是不是结果是啊。
我来说两句