2引用相等和对象相等
(1)引用相等(2)对象相等
(1)引用相等引用相等
即指引用到堆上同一个对象的两个引用是相等的.是相等的
引用相等:引用相等
HumanxiaoMing=newHuman();HumanxiaoFang=xiaoMing;xiaoMing.gender=‘M’;xiaoFang.gender=‘F’;
xiaoMingxiaoFang
0x01abcdef0x01abcdef
????????????????‘F’????????
那么如下调用:
(1)if(xiaoFang==xiaoMing){//true}else{//false;}
那么如下调用:
(2)if(xiaoFang.equals(xiaoMing)){//true;}else{//false;}
那么如下调用:
(3)
if(xiaoFang.hashcode()==xiaoMing.hashcode()){//true}else{//false;}注明:默认返回的是每个对象特有的序号(大部分的注明hashcode默认返回的是每个对象特有的序号大部分的默认返回的是每个对象特有的序号大部分的Java版本是依据版本是依据内存位置计算此序号,所以不同的对象不会有相同的所以不同的对象不会有相同的hashcode)内存位置计算此序号所以不同的对象不会有相同的
(2)对象相等
xiaoMingxiaoFang
0x01abcdef0x01abcdf5????????????????‘F’????????????????????????‘F’????????
对象相等要求:
xiaoMing.equals(xiaoFang)&;&;
xiaoMing.hashcode()==xiaoFang.hashcode()
注明:equals默认行为是执行==的比较默认行为是执行注明的比较
总结:
两个相等的对象两个相等的对象,hashcode必须相同必须相同但是但是hashcode相同的对象个不同的对象可相同的对象(2个不同的对象可相同的对象以通过覆盖Object.hashcode()使其相同其使其相同),其以通过覆盖使其相同对象的equals不一定返回对象的不一定返回true不一定返回