两个变量引用的对象要怎样才算相等?

两个变量引用的对象要怎样才算相等?

两个变量引用的对象要怎样才算相等?
引用完全相同的对象,还是有相同状态和行为的不同对象也算?
这是一个很关键的议题:引用相等性和对象相等性。

1. 引用相等性:堆上同一个对象的两个引用
也就是说两个引用变量引用的就是同一个对象,hashCode()默认的行为会返回每个对象特有的的序号,大部分是根据内存位置计算的。既然本就是同一个对象,hashCode()自然是一样的,两个引用自然也是相等的

2.对象相等性:堆上的两个不同对象在意义上是相同的
理论上来说要让两个不同的对象视为相等的,首先两个对象的hashCode()必须相同,然后要确保一个对象调用另一个对象为参数的equals()会返回true //equals比较字节组合
关于引用相等性,很好理解:假如一个女孩跟你和你兄弟同时谈恋爱(你们两个都引用她),突然有一天你们三个碰到一起了(判断对象是否相等),那么你和你兄弟会说,哦原来我们的对象是相等的(返回true)

关于对象相等性,可以这么理解吧,两个对象被分别new出来的时候不是同一个对象,但是经过你的改造:覆盖了hashCode()和equals()方法(改变了他们俩的家庭住址和字节组合让他们变成一样的),于是他们也就相等了,至于怎么覆盖来实现相等,方法很多

你可能感兴趣的:(JAVA小知识,java)