00:05
我看同学们在这讨论啊,这个东西呢,调的equals是address里面的equals。Address中的equals方法没有重写的时候,比较的是对象的内存地址。对吧,哎,那么。你上面这块是不是扭了一次。你是不是又扭了一次啊?对吧,哎,你拗了一次,你又拗了一次,你拗了两次啊。你扭了两次,那么这块呢,就是两个对象的内存地址啊。所以你你想想,你这个扭出来之后,是不是传给了U1。哎,U1就是user嘛,这个address。是吧,等于0X什么1234嘛,那如果你下一次你再用一个新的用户对象的时候,这个地方。
01:04
又了一次对吧。New address这个地址,你想想你另外一个user对象,你第一个user对象已经创建完了啊,第二个user对象它的address后边这个等号,后边这个地址是不是就变成0X2589,哎,是别的地址啊。对吧,哎,别的地址啊,那么这块呢,大家注意啊,就是说重写equals,你要重写的彻底。你明白什么意思吧,你不能说你比较user的时候,你重写user它的equals方法。你别忘了,你那user里边还有一个address,你address里边。在比较的时候,你也得也得调这个EQUALS2这个equals方法在你的address这个类当中,你addressed equals是不是也得重写呀。对,就是说这个例子,我主要是想给大家演示一下什么呢?Equals方法重写要彻底,Equals方法重写的时候要彻底,有同学老师我这个关系我捋不清楚,到底应该咋咋整咋重写,你记住杜老师一句话就行,以后只要是你写Java,普通Java类,像这种属性私有化,对外提供公开赛的的方法,只要是这样的类,你ES都给它写上,保准你没错。
02:16
你想想你这个类,你你当时如果把E写上是不是一切有没有问题,因为你这个this.adr指的是它呀,它是一个address,和后面的这个address怎么着和后面address进行比较的时候,你总不能用双等号吧,对吧?哎,你你你你你不能用双等号啊,我说了。你前面这个this.adr就是一个address,你后边这个u.ADR也是一个,你address和ADDRESS2个对象,两个对象比较不能用双等号,之前不说了吗?比较就得调equals方法,所以你点equals括号里面传上它就行了。this.a点点ES。
03:02
是吧,哎,所以你这个equals调的谁啊,就是this.adr的,而this.adr是谁address address它的equals方法嘛,所以你这边你得让你的address它的ES得重写,有同老师我就不重,我就不重写咋地吧,你上边你又了一次一个对象又丢一次一个新的对象,两个对象不同内存地址,你如果在这调ES下边这个类要是没有重写equals方法是不是object里边equals会有调用object equals是不是比较的双等号,Object那个类里边equals方法是不是比较的,用双等号比较的。对吧,那我这个address由于没有重启E口是不是也是用采用双等号比较的呀?那你这个z.ADR是不是就是这个address对象,你下边这个u.ADR是不是就是你另一个对象,你这两对象内存地址不一样啊,所以这个一定是false,如果短路语右边这个为false,结果就是false。所以大家看现在我们这个程序啊,他去怎么着去执行这个结果肯定是false,按说不应该是false,应该是to,因为张三一样,家庭住址一样,我认为是同一个用户,所以大家看啊来Java c呢,去编译T05.java然后我们Java去运行T05走。
04:17
Father。对吧,你不能是负三。对吧,你得是处啊,所以大家看这个地方我们是不是也得。调ES了吗?所以也得重写,也得重写equals啊,你在这里调用了,我们就得重写equals方法,返回per类型。返回不玩类型啊,然后接下来。在这个位置上,同样写法OBJ要等于等于空,或者说我们OBJ。Instance of。如果它不是一个。
05:01
啊,OBJ等于空,或者说OBJ呢,它不是一个address,妥了,那肯定return false没跑了,如果你看固定写法吧,This要等于等于OBJ的情况,妥了,我们给它返回一个处,那么到这儿之后呢?哎,怎么算是?呃,家庭住址相同,怎么算是家庭住址相同呢?哎,我说城市相同。街道相同,街道相同,明白吧,然后呢,邮编相同。表示相同,那如果是这样的话,那如果是怎么着啊,城式相同对吧?哎,城市相同,并且说我们的街道相同,哎,并且说我们邮编相同,那么最后return一个什么呀,To,别的情况我们RETURN1什么呀,I false啊,Return一个false。
06:02
啊,是这样。那么这个城市。哎,又来了,你看你有没有发现equals重启的时候啊,它规律都是一样的,需要把obj干什么,哎,转个型,各位把它先强制类型转换成一个什么一个address。你把它先转成一个address是吧,我们叫address a,那么接下来你这边无非是谁呀?哎,是你this的city.this的city是不是一个字符串啊,字符串和字符串比较对吧,怎们比较点equals括号里边A点什么?哎,City你看是吧,那你街到这块呢,街到是this,它的street接到这是一个字符串,你是字符串你就可以在这点什么,哎,Equals,那你括号另外的街道就是我A点什么呀?哎,Street是不是你邮边这块大家想一想是不是也是this.zip code邮编zipip code邮编点邮编它也是润润,它也有一个ES方法,括号里边我们写上什么呀,叫做U,呃,不是UA啊a.zip code,好,大家看这个代码就变成这样了。
07:16
往下。再往下换个行,如果说城市相同,街道相同,邮编相同,返回处其他返回false。对吧?哎,这个程序是这样的,那如果说我把这个equals方法也重写了,我问大家在我们的user和user对象之间进行比较的时候,调到这个ES是不是我们的这个equals方法,那么我们这个ES方法在执行过程当中,是不是会去调字符串的equals方法?好,我问大家字符串人家的ES法有没有重写,是不是已经重写了?好,现在我们这个address的equals方法是不是在后边调的是address它的equals方法,这个equals方法是不是我们也给它重写了呀?哎,所以说你看我们实际上这边是不是学的sun公司啊,你好好想想,人家this.name这个东西是一个字符串啊,字符串是个引用比较的这种equals,那我们后边这个家庭住址,我们address这个东西,诶,它也是一个类啊,它比较的时候也会调equals方法,但是只不过S公司的这个equals,我们在这已经重写,S公S已经重写完了,你直接调就行了,而我们这个ES可能需要我们程序员手动的去写一下啊,去写一下,所以现在这个程序你再看它就没有任何问题了,来,我们再去编译一下,我们再去执行。
08:28
好,大家看最后结果是不是就出啊。没问题吧,哎,最后结果就是true了。看见没?哎,就是为针了,哎,那我们看看false会不会啊,比如说现在我们在一这里又new了一个user,这个叫U3,然后接下来呢,我们在这块呢,给它改一改,比如说我们叫北京,呃,这个叫朝阳区,然后接下来这个改成二,然后接下来我们system.out.print line打印,我们输入一下u 1.es括号U3,那么这个结果肯定是false,为什么呀?因为你叫张三,你叫张三,但是你的住址是北京大兴,他是北京朝阳,那就不一样了,所以这个结果就是false。
09:10
啊,所以这块呢,我们Java c呢去编译,我们Java去运行,好大家看最后这个结果是不是就false。对吧,啊就是false啊,谁是false这块是false。UR为什么是object类型呢?不是user类型的吗?You are。呃,你是说这个吗?这是重写复类的方法呀。你负类方法长这个样子,你就得长这个样子啊。你用OBJ去调能调出来吗?
10:01
诶,学懵了各位啊。好像有点懵了。你们。Object这个类里面是不是有一个方法。这个equals方法我们现在是不是要重写人家,人家这个equals方法括号里边是不是object啊,所以你在重写这个方法的时候,是不是也只能写一个object,不能写别的。对不对啊。那接下来,但是你是不是要在这个大括号里边去调用人家相关的属性啊,你比如优点name,这是优点ADDR你才能调,你如果不给它转型,你用OBJ去调不行啊,你用OJ调调不了啊,因为all里面没有name属性啊。这个用OB这调不了啊,你得转型啊,你得转型啊,你得把这个object转型嘛,转成U,然后。不,你这个参数不能随便写,你就得这么写。啊,你这个你是重写复类方法,什么叫重写,还记得吗?我们之前讲没讲过一个此类集成复类之后,重写复类的方法是复制粘贴,把复类的方法复制过来,粘贴到这儿。
11:07
说过吧。我这个好像说过呀。呃,梁欢,你是想问什么呀?UR为什么是object类型的?U2在哪哪,哪个是U2来我搜一下。U2,对啊,你说的有道理啊,U2,是啊。U2是有点类型啊。你们说话没毛病啊。U20有点儿类型,对着呢。梁欢说得对啊,梁欢在不在梁欢?U2。是类型啊。
12:01
没毛病,但同时U2也是一个object呀,没毛病啊,多肽呀。诶,完了,欧米O等于等于。New行不行?各位告诉我这样写行不行?来,再来object or等于new一个user,好,告诉我这样行不行?Object o3new一个address。行不行,没毛病吧,老铁们。哎,这不是多肽吗?副类型的引用啊。指向子类型对象啊。U2自动转型了。你说U2现在不是传给了equals吗?U2在这是不是传给了equals equals里边有一个object呀,能啊,没问题啊。
13:07
我U2完全可以付给这个这个object呀。可以啊,我U2不是传给了ES吗?我equals方法的参数不是object吗?Object能不能接收一个user啊?Object能不能接受一个user啊,可以啊。就向上转型啊。诶,这就是自动类型转换,自动类型转换。自动类型转换各位啊,Java c编译T05.java然后Java去运行T05走啊true false。是吧,编译和运行都没问题啊。编译和运行都没问题。啊。你看没忘错呀,这语法是合适的,没问题啊,这样可以。可以啊,可以。行了,各位啊,我在这里讲了半天,主要想说一个,想说一个啊,就是方法一定要重写彻。
14:08
啊,注意重写equals方法的时候要彻底。你比如说你要重写这个user的equals。那么如果你在这个方法执行过程中调了另外的ES方法,而你另外的这个类型是你自己定义的话,你这个ES也得重写。我这句话好像没毛病啊,同学们,好好,好好思考一下,你的程序要想比较你的user是否相等不相等,你是不是你user的equals方法,而你user equals方法执行过程当中。你是不是去调了另外一个对象的ES啊,而你另外一个对象的ES方法,我问你,你是不是要是不重写他就得这个ES,是不是调人家老祖宗的ES方法,而老祖宗的equals方法是不是比较内存地址啊,所以你自己写的这个类就得重写equals法,那有的老师为啥前面这个没有重写equals错了,this.name它是一个string,顿,上午讲的时候它就已经重启了equal方法,所以你这里直接调就行了。
15:11
这个equals是字符串的equals,这个equals是人家address的equals,然后你这个equals是属于你user的equals,虽然这个是equals,这个是equals,这个是equals,这三个equals是不同的equals,这个equals是user类的equals,然后这个equal是字符串的equals,这个equals是我们address这个对象的S,你字符串重写了,我的address也需要去重写equals不重写就完蛋了。啊。不靠谱不靠谱啊,不建议使用twoth润进行对比啊,不建议twoth润对比啊,不建议twoth润对比啊,不靠谱啊。不靠谱儿不靠谱啊,行,那么这块呢,我们主要是把equals方法再说一说啊。
我来说两句