00:00
行,那接着的话呢,我们来说一下,这个叫equals方法,这个我写一个二。Equals这个方法的一个使用。这块呢,是咱们这个新的内容,咱们看一下这里边涉及到这个知识点都有什么,这个ECO的话呢,我们从这个这个object不这个类当中看到呢,它是比较两个对象呢,是否相等,这句话呢,其实有点泛泛,那我们得看它具体展开是什么意思,首先首先呢,我们能够确定一点,这个equals呢,相较于我们这个等等来讲呢,它是一个方法了,这个是一个方法,这个而非运算符,这是第一个情况,然后呢,第二个情况,这个ecos的话呢,既然是一个方法,我们讲到方法呢,要想被调,咱们目前是不是都是通过对象掉的,那对象呢,就是就通过这个类呢来创建的,那压IG呢,就是这个eo的方法呢,它是不是就不能够使用在基本数学型变量当中了。你想我这是个in的形的,哎,我这I能点出来E口吗?点不出来的,我这个I点啥玩意没有。
01:10
哎,你看这个基本数据类型变量C一点二点不出来了,就是基本数据类型变量,注意它不是类。咱们Java讲面向对象,面向对象其实呢,你要这个这个悲观点去说啊,Java的面向对象呢,只是针对于咱们说的这个类来讲的类呢,属于引用类型,除了这个之外呢,是不是还有一波叫基本属类型啊,其实严格上来讲,咱们说的Java的面向对象其实是没有含着人家基本属于类型的,咱们讲了这个继承性,封装性,多态性,说了半天基本数据类型玩不了。哎,正因为他玩不了,所以咱们今天下午再讲个内容叫包装类啊,一讲包装类啊又可以玩了,这就相当于进行了一个补充啊,那个咱们一会儿再说,那也就是说呢,基本数据类型这个变量啊,它点不了,它又不是对象,咱们只有对象才可以去点,也就是说呢,咱们这个EQ的方法呢,只能够适用于引用数据类型。
02:06
适用于引用数据类型,那么既然只能够适用于引用数据类型,下边呢,我们就得关心一下,在引用数据类型当中,它使用的时候呢,到底表示什么意思?好了,那我们看到呢,咱们刚才也定义过两个对象,COST1和二呢,也定义过两个,我们自然而然的就会想到我们去调一下。比如说我这个COSTS1,我能点出来equals吗?可以为什么能点出来啊,诶我们自己这个类呢,确实没有定义过,但是你的父类CTRLT是不是object,那现在我能点出来的这个ES是不是就是人家object当中定义过的?没问题,所以呢,我们把咱们这个COSTS2呢再放进去,这个时候eo方法相当于这不就用了一个多肽嘛,这个O方法的型态呢,是object类型的,我们放了它的一个子类叫customer类型一个对象了,所以这个多态呢,其实无处不在,很多地方都有,只是让你都没有感觉了都啊,我们拿这个CARS1呢去equals cos2,那这时候我们想这个结果是出还是false?
03:24
有说处的,有说false的,我们还是看这个结果,结果我这样吧,我在这加一条线。加条线,咱们下边呢,说的是这个equals的事执行,咦,是个force是吧,它是一个force,好像跟我们有些同学想象的就不一样了,按说呢,这个equals似乎呢,是不是该去比较这个内容是不是相等的呀,但是你发现的这个结果还是个false,跟我们这个等等的一样,都是false,那我换一个看看我们的这个HR一点e co4这个我们写一个IR2执行一下。
04:09
走,OK,诶,他又是个处了。这就有点意思了。那么怎么解释这样一个事情啊?那这时候呢,大家你可以去debug,你说诶我看看这里边到底怎么回事,你这是false,这是to,到底在哪一个源码当中反馈的是true false了,里边怎么走的啊,是可以去debug的,那这块呢,我们就直接来说明了,这个ES呢,你往这一放,很显然呢,告诉我们调的是object这个类当中声明的一个方法叫equals,而我们这个string的话呢,你往这一放,它是string当中写的这个equals,这个equals呢,我们string进行过重写,所以说呢,就不会去按照object当中这个来声明了。啊,那重写以后,那可能人家的某种原原因是吧,导致他这出了,所以我们一会儿再说这个事儿,首先呢,我们关心的是这个,既然你调的是object当中的equals,我们就关心object当中这个ES它是怎么定义的,我们一按的这个CTRL键就能看到它的源码。
05:12
Object当中它的源码一看,恍然大悟,原来E的方法在object当中定义的时候呢,跟我们的等等呢是一样的,是一样的,好,这个事呢,我们拿过来,首先呢,我们关心的第一个问题就是object这个类中equal方法的一个定义。诶,我们CTRLV转过来了,这就是我们object当中这样的一个定义,通过这个定义呢,咱们能够看到的点就是条件格式啊。看到这个这个这个源码以后,我们能够得到的信息点呢,就是我们当中定义的eo的方法和我们等等的作用是相同的。
06:01
我们写到这吧,加一个说明,我们这的这个类中定义的E的方法和这个我们的这个等等符号,它的这个作用。是相同的,什么意思呢?就是比较两个对象的地址值是否相同啊,也就是说呢,比较它两个对象呢,是否这个指向同一个对象实体。所以说我们下边这个customer的话呢,我们是false,这就理所当然了,这就不用多说了,行,这个呢,就是我们说清楚它这个事儿了,那说清楚它以后,我们紧接着来讲下个问题,就是string呢,我们发现呢,它返回的呢,又是一个true,其实不光它是true,还有一些结构呢,返回的也是true,举个例子,比如说我这有个date叫日期了,我去new一个date,这个里边呢,我去写相应的一个。
07:04
这个浪形的一个变量了,这个呃一个常量就相当于这个值的话呢,就是我们1970年呃,1月1号00:00:00到现在这个毫秒数啊,我这加上一个啊U下的,我现在呢,再造一个,再造一个我写个二,让他俩这个时间呢,对应的是一样的,明显的这是两个对象,这两个对象呢,我要用等等去判断出2FALSE3。等等,肯定是false了,俩new嘛,但是呢,我现在呢,用这个叫equals。Equals呢,算是叫比较内容啊,我们执行一下发现呢,你看这个结果也是个处,就是这时候呢,这个处,包括我们这个string,它肯定比的不是等等吧,显然不是等等了,所以呢,哎,我们这里边把这个事说一下。什么事呢,说像像谁呢?像我们说这里边这个string,包括呢,咱们见到这个date日期,还有呢,我们后边讲这个L流的时候,要用到这个for,以及呢,咱们后边这个讲完object以后呢,还要提到叫包装类等,这些类呢都重写了object类中的E方法。
08:23
Object这个类中的E口的方法。那么它重写以后,他们其实有一个共同的一个重写的一个规则,重写以后呢,比的就不再是等等了,而是呢,比较两个对象它的实体内容是否是相等的啊,重写了这个一会方法,然后重写以后这个比较的不是两个引用是否呃,两个引用的这个地址是否相同。而是比较两个引用或者叫两个对象也行,两个引用啊,两个对象吧的这个实体内容是否相同,这个实体内容的话呢,我这加上一个引号啊,这个是咱们一个非这个Java这里边儿的一个描述了,就平时大家讲的一个实体内容了,那这里边这个实体内容其实指的就是我们这个呃,String也好,对也好,它的那个属性是不是相同了,那对于我们这个string来讲呢,它其实这里边我们看到的这个艾特硅谷呢,是它内部的一个属性叫艾特硅谷了,我们最关心的也是这个属性,所以就是比这个属性是否相同,而这个date呢,这其实也是它内部的一个属性了,咱们知道这个构造器带参数,参数通常呢,是不是给我们这个属性赋值的呀,那这个也是一样,哎,我们最关心的就是那个属性,我们就比较那个属性呢,是否是相同的了,哎,那这个属性呢,它代表的意思呢,在date当中,就是你对应的那个毫秒数,那显然呢,这。
09:58
两个数是相同的,我们就认为呢,它俩是true,哎,这呢是咱们其实在开发当中经常用的点,咱们在开发当中用ES的时候呢,如果你要是string也好,Data也好,咱们用ES也确实呢,不想让他去比较两个是不是同一个引用了,就想让他去比一下你的内容呢是否是相同的,所以咱们呢,就直接调人家的这个equals,写现成的这个就OK了。
10:23
就没有问题,行,这是我们先要清楚这个第四个问题,这样的话呢,就能解释为什么这个咱们自定义的这个呢是false,而这个string呢,它是个true,就解释清楚了,这个解释清楚以后,那么下一个问题要说的就是我们怎么能够自己来定义一个equal方法,让咱们这个customer呢,也可以返回是一个处。哎,这就咱们下一个问题了。
我来说两句