00:00
那行了,那咱们这个上午说了啊,这个equals方法实际上还有一些遗留问题,是不是,哎,那么接下来我们把这equals方法的一个遗留问题我们看一下啊,我们看一下。这怎么这个在线人数怎么今天这么这么低呢,怎么感觉。一会儿就走了,一会儿就走了,是特别卡吗,同学们。看不看?不卡是吧,啊行行行,刚刚有点是不是。啊行行行,好嘞好嘞,那行咱们就继续再往下了啊,再往下了。行吧,那在这里呢,我写一个程序啊,大家来判断一下这个ES,我先把class文件删了。看看这个该怎么写啊?
01:08
T05。现在呢,在这儿有一个类啊,这个类呢,延迟两分钟。我的天。不应该吧?来继续了啊,这边有一个什么呀,叫user啊,或者是叫student。UUU吧啊UR啊,然后接下来呢,在这个位置呢,我们有一个类啊叫什么呀,叫做。Address这个呢,程序啊,是大家比较熟悉的程序,比如说这里有什么呀,有这个city。有什么呢?有街道啊,还有什么呀,Zip code,邮编。是不是,然后接下来我提供构造方法。啊,无参的,然后再提供一个有参数的构造方法。
02:04
大家注意听课啊,来。啊,Zip code。This点是不是,哎,叫city city是吧,This street。啊。this.zip code zip code好了,那么这是无参数的构造方法,下边这个呢,是有参数的构造方法啊,有参数的构造方法那行了,那么接下来呢,我们呀,在这里按说是不是应该重写图论方法呀。对不对啊,哎,重写图论方法啊,然后呢,应该在这怎么着啊,哎,重写equals吧,哎,因为我说过这个结论呀,你以后就要记得重写嘛,是不是啊,重写E方法,那假如说我这个方法都不重写呢,假如说现在我不重写了,各位啊,我user这一块。它的属性是什么属性呢?User有这个ID啊,User有这个呃名字啊,User还有什么呀?啊,这个或者ID去了吧啊有一个名字,还有个家庭住址啊啊joyd点注意啊,这个就是我们的用户名啊,下边这就是我们用户的住址。
03:24
啊,那么接下来我们给构造方法,一个是无参的行不行,一个是有参数的构造方法,你就接着写就行啊。之前怎么写构造方法,现在还怎么写this.name name呗,对吧,this.a.R等于ad点呗。是不是啊,这个很很简单吧,三个属性,无参的,有参的。两个属性无参的有参的是不是诶。那么假如说啊,我们在这里怎么着呢,就重写equals方法,重写equals方法。
04:00
那么这个重写规则我说一下啊,就是当什么呀,当一个用户的用户名。和家庭。住址。都相同。表示同一个用户。那你这个equals方法应该怎么重写呢?你的equals方法该怎么重写呢?各位大家思考一下object啊,OJ。思考一下。这个类。我们这儿吧,哎。大家别多想啊,别多想,我说一下你自己定义的这个address是个class对不对。那我们这个name的类型是不是也是string呢?String是不是也是个class啊?Class是sun公司写的,这个class是不是我自己写的呀?大家呢,不要把它特殊化啊,你不要把说散公司写的就高端大气上档次。我写的就low的不行,我写的也是一个class啊,Sun公司写的string不也是个class吗?这个string可以往这写,那我address也可以往这写。
05:09
对吧?实际上这个name将来在这保存的是0X1234的一个内存地址,我不知道大家还记不记得今天上我写过这样的代码叫new顿吧,括号里边是不是写个ABC啊,那这个内里边实上保存的是啥?并不是ABC字符串啊,Name这个变量里边保存的实际上也是个内存地址,是一个字符串对象的内存地址,实际上这个内变量里面保存的是这个东西0X1234吗?这么一个东西啊,同样其实我告诉大家,我的address这一块也一样,这边怎么着也是保存0X2356这样的内存地址去指向一个对象,只不过说我这个a drr指向的对象是啥呀?是一个address对象,而你的这个name这个变量保存内存地址指向对象是一个字符串对象。啊,啥时候address也会变色,看起来就习惯了,那不行,S公司写的才能变色啊,咱们程序员写的这个变不了色啊,咱们写的变不了色。
06:03
变不了色。要知道啊,要知道这个是一个类,这个我们也是一个类,这是三写的,这是我们自己写的,将来这块保存的也是内存地址啊,我们这个保存的也是内存地址,好了,那这块我都给大家说明白之后呢,大家看清楚啊,这里注意啊,我注意一下写上这里并没有重写equals方法。注意啊,这个equals是判断address和address相同不相同的吧,对不对啊。这里的equals方法判断的是是谁啊?是呃,Dress和dress对象。Address对象和address对象是否相等?那你现在的这个equals是在这个类当中,所以这个equals判断的是什么?这个equals。
07:02
Equals判断的是是什么,是user对象和user对象是否相等,但是我上面有个规则,大家看见没有,怎么就认定用户跟用户相等呢?我们如果用户名跟家庭住址一样,就是这个规则啊,就是很明白,当一个用户的用户名跟家庭住址一样的话。用户名跟用户名相同对吧,用户名和用户名相同。住址和住址相同的时候,认定是同一个用户,那你这个这个地方的这个ECO方该怎么写,首先老规矩吧,是不是啊,那个架子怎么写,还记得吗?如果OBBJ要是怎么着等于等于捺它要等于空或者说什么。Obj instance of,谁呀,叫做user是不是?如果它不是个用户,或者是它,它是空的,它是空的,或者说它根本就不是个用户,那妥了那妥了,就直接return什么呀?哎,False就完事了,对不对?那如果说this要等于等于OBJ内存地址一样的话,那就没得说了,Return true就行了。
08:18
你看其实这个equals方法前面这一块它的写法怎么着啊,都是固定的,哪怕就是你复制粘贴都行啊,它等于等于空,或者说它不是一个user的话,我们就返回一个false程序到这儿的话,内存地址相同的话,那就不用说了,那肯定是true了,那肯定是返回true了,没得说了,对吧?来继续再往下。那如果什么呢。如果用户名吧相同,并且说什么家庭住址相同,最后我们是不是就return一个true啊。其他情况是不是return一个false就行了,那用户名相同不相同怎么判断呀?好,各位看好了,用户名是不是类型。
09:01
我上节课有没有讲字符串,要想比较是不是用equals方法?对吧,哎,所以说用户名相同不相同,来看一看啊。嗯,这个是 thisthis.name对吧?哎,这个this啊,指的就是我们将来谁去调这个方法,This就是谁嘛。对吧,你用用户对象去调这个方法,所以你的意思就是用户嘛,你调这个方法,将来会往这传一个参数啊,就其实我也可以把这个测试程序先创建好啊,User you new一个什么呀?哎,User new的时候呢,我在这块大家看需要一个name是吧,这个name呢?哎,我可以给他传过来,比如说叫张三,那么再往后呢,他需要传一个什么呀,家庭住址,那家庭住址这一块的话,他需要一个对象啊,你看address啊。对吧,所以你可以把这个address先溜出来,那address new的话怎么溜啊,Address ad对不对,哎new一个address new这个的时候呢,大家看看啊这块。
10:02
是吧,有三个string构造方法,所以我们传一个啊,比如说叫北京。北京啊,然后大兴区啊,然后接下来邮编是111111,那么接下来我们把这ADDR传进去。这样的话是不是new一个user的时候,我们调的这个构造方法,这个构造方法需要一个name,我给他传过去了,第二个参数需要一个address,是不是传过去了。是不是这个,哎,那我这样我直接拗行不行啊,没问题吧。是不是这样过来行了。对吧,哎,那么接下来我这假如说是U1吧,然后再来个U啊UU2等于new一个U,结果呢,这个人的名字也叫什么呀,张三,然后他家也住在大兴。那么这个时候呢,我要调用我的什么呀,叫做U1.equals谁呀,U2这个结果按说应该是处才对,因为他呢都叫张三,家庭住址就一样。
11:07
对不对,所以说呢,我们这块呢,应该是true吧,结果应该是true,但现在我们不就正在重写这个equals方法吗?如果你现在不重写这个equals方法,这个equals调的是不是object里面equals啊,Object里面equals方法只要一执行是不是,是不是比较是对象内存地址啊,哎,你拗了一个,你又new了一个,是不是两个对象两个地址啊,所以就是false,但现在呢,我们应该是true啊来,所以在这边呢,你的UE啊,去调ES回来了啊,调了ES方法,那this我问大家是不是就是U。你U2作为参数传进去了,传给谁了,传给了我这个OBJ对吧?所以OBJ这个参数是不是就等于是U2啊。对吧,所以在这块呢,你就可以拿了,你想拿this.name是不是这是名字,然后怎么着你你得转型吧,你是不得转型强转吧,因为你OB这里边没有内啊,这不跟上午上午那个说的一样吗?对不对,OBJ它是O类型,它里边没有内吗?所以说你得转型怎么转OBJ。
12:05
前面加强制类型转换符叫user。你强行把这个OBD转成user,那么接下来这就是user u呗,是不是?哎,那这样的话,你是不是有一个this.name同时你有你又有一个u.name是吧?this.name实际上说的就是谁就是这个U1嘛,它的这个name嘛,对吧,然后你这个U2是不是作为他传过去传给了这个OBBJOBBJ转型转成U点,这个U是不是就是你OBJ啊。所以,所以你this name取的是哎,我们这个人的名字,然后呢,你下面再来个u.name取的实际上这个人的名字,那么名字名字都是字符串,字符串怎么比较啊,用equals方法,所以我们这边应该怎么写啊,应该是this.name是吧?哎,这是一个字符串,点equals方法,括号里边传另外一个name对吧?哎,叫优点name,好了,大家看这个。我们是不是一个名字字符串啊。
13:02
是吧,后边这个是不是也是一个字符串啊,啊字符串和字符串之间比较用ES方法,记住啊,这个ES方法和这个ES没关系啊,这个ES是人家字符串的equals。是字符串 equalsthis.name不是字,不是一个字符串吗?this.name它是一个字符串,字符串的equals方法括号里面传另外一个字符串,就是优点name呗。啊,如果名字怎么着为处相等,明白吧?哎,并且短路语吧,家庭住址也相等,那么家庭住址大家想一想,this.this是不是ADR,这是不是就是那个引用?对吧,哎,This点你可以this.name啊,它是一个什么呀,字符串。是不是,那你这边就可以this.addr嘛,this.addr就是个address,你是一个address里边有没有重写S方法在这有没有重写啊?哎,这里还没有重写equals,没有重写equals,我问你这个类有没有继承object,它如果继承object,我问大家问题,这个类是不是也有一个equals方法,这个类的equals方法只不过是从object里边继承过来的吧?那接下来我们this.adr说的实际上就是它,它就是address address类也有equals方法,那这里点equals括号里边填一个什么u.u是U是它呀,U是它user啊,那user里边是不是有个A点,所以这样。
14:25
z.ad点这个其实是它。明白吧,优点ADR其实是另外一个对象的,它啊一样的啊一样的各位。那么这块呢,咱们。思考一下啊,思考一下。this.ad点点 ESu.a点我这样写这个程序会有什么问题啊,给大家点时间。给大家点时间啊,想一想,思考一下我这个程序运行会有什么问题啊,思考思考。
我来说两句