对象的引用(object obj)存在栈中,而对象的内容(new object())存在内存的堆中。
两个对象obj1和obj2:
两个对象的类型以及属性值都相同,则这两个对象相等,即obj1.equals(obj2)
如果两个对象引用变量指向同一个对象,则称这两个对象同一,即obj1==obj2
所以,两个对象同一,则肯定相等;两个对象相等,不一定同一。等号“ == ” 判断的是这两个对象是否同一。
hashcode:
两个相等(equals)的对象可能存在不一样的hashcode,如果两个对象的引用都指向同一个内存堆,因为对象的值和属性存在堆中,所以他们是相等(equals)的,但是对象的引用时存在栈中的,而对象的引用在栈中的地址是不同的,所以两个相同的对象的hashcode可能是不同的。
同样两个不同的对象的hashcode也可能是相同的。
两个对象obj1和obj2:
两个对象的类型以及属性值都相同,则这两个对象相等,即obj1.equals(obj2)
如果两个对象引用变量指向同一个对象,则称这两个对象同一,即obj1==obj2
所以,两个对象同一,则肯定相等;两个对象相等,不一定同一。等号“ == ” 判断的是这两个对象是否同一。
hashcode:
两个相等(equals)的对象可能存在不一样的hashcode,如果两个对象的引用都指向同一个内存堆,因为对象的值和属性存在堆中,所以他们是相等(equals)的,但是对象的引用时存在栈中的,而对象的引用在栈中的地址是不同的,所以两个相同的对象的hashcode可能是不同的。
同样两个不同的对象的hashcode也可能是相同的。