qq__878
2015-07-30 19:35
老师说判断引用的值是否相等就是比较的地址是否相同(this==obj),可是地址不是应该不一样么?怎么说是指向同样地址,相当于指向同一个对象。
第一个问题:第一个地址是调用这个方法的对象的地址;另一个地址是这个方法中参数传递过来对象的地址。
第二个问题:我觉得是你的equals理解的不够吧。拿手机来举例的话。
一般我们说手机是否一样,是比较手机的型号、品牌、颜色、尺寸等等,如果一样的话,那么这就是2个一样的手机,对吧。比如你有个iphone5,我也有个iphone5,那咋俩的手机一样。
但是在不重写equals方法的时候,原有方法认为2个手机一样的条件是,只能是同一部手机。这个条件比咱们需要的条件还苛刻,所以很多时候不适用。
我们重写equals方法,第一句就先判断究竟是不是同一部手机,如果是肯定相等啊。如果不是,然后看他俩都是不是手机,如果一个是手机,一个是砖头肯定也不用比较了,肯定不相等。然后再看另一个存不存在(就是null),要是你都没有手机,咋俩也不用比了。。。如果咱俩都是手机,ok,开始比较手机的参数了。
不知道你明白了没有。
还是你啊,看来你很勤奋好学啊,加油共勉。
程序里有的变量的地址值就是会相同的啊。
比如Student s1=new Student(); //s1指向了一个新创建的对象
Student s2=s1; //这里的s2指向的就是s1啊,所以他俩的地址值肯定相同啊。
当然,基本不会让2个变量总指向同一个地址值,否则他俩就没区别了。所以这也就是为什么很多时候需要重写equals的方法,就是不判断地址值,而是判断对象的所有属性值。
Java入门第二季 升级版
530559 学习 · 6091 问题
相似问题