当前位置: 技术问答>java相关
两个对象相等的意义是什么?
来源: 互联网 发布时间:2015-11-20
本文导语: 两个对象相等(o1==o2 为true)的意义是什么? 是o1和o2所有成员变量都相等就为true 还是o1和o2是同一个对象是才为true? | later one actually,they have same hashcode | 有相同的句...
两个对象相等(o1==o2 为true)的意义是什么?
是o1和o2所有成员变量都相等就为true
还是o1和o2是同一个对象是才为true?
是o1和o2所有成员变量都相等就为true
还是o1和o2是同一个对象是才为true?
|
later one
actually,they have same hashcode
actually,they have same hashcode
|
有相同的句柄
|
两个句柄指向的实例是同一个
改变其中一个,另一个也跟着变了
好比两个钥匙对应同一一个房间
改变其中一个,另一个也跟着变了
好比两个钥匙对应同一一个房间
|
这个问题涉及到几个方面。
如果o1,o2的equals()没有被重载,那么o1==o2 为true
意味着o1,o2指向内存中的同一个对象实例。
如果o1,o2的equals()被重载过,那么结果取决于被重载
equals()方法。
如果o1,o2的equals()没有被重载,那么o1==o2 为true
意味着o1,o2指向内存中的同一个对象实例。
如果o1,o2的equals()被重载过,那么结果取决于被重载
equals()方法。
|
一般比较对象就是比较hashcode
|
agree hotenM(CMP)
o1 == o2 相当于 o1.hashcode() == o2.hashcode()
是否指向同一个内存地址
o1 == o2 相当于 o1.hashcode() == o2.hashcode()
是否指向同一个内存地址
|
"=="如果是对象的比较则是两个对象的指针指向同一内存空间,如果为基本简单类型变量,则为不同内存空间的内容相同。
|
同一个对象
|
内存地址相同
|
up
楼上说的非常对
楼上说的非常对
|
因为jvm对于hashcode()的实现就是取得这个对象的地址,所以可以作为对象相等的标志(除非你重载了hashcode(),哈哈)
|
如果没有重载hashcode,hashcode相等就对象地址一定相同吗?我没看过jvm源码,只是心存疑虑。
|
== 比较两个object的references,
equals()比较他们的content
equals()比较他们的content
|
这肯定是同一个对象撒,它们在内存中是占同一个存储单元,其中你改变其中一个另一个也会跟着一起变。
|
to crm2000
即使没有重载hashcode,hashcode 相等也并不意味对象的地址一定相等
这取决于jvm的实现。当然sun的jvm是以内存地址作为hashcode的
即使没有重载hashcode,hashcode 相等也并不意味对象的地址一定相等
这取决于jvm的实现。当然sun的jvm是以内存地址作为hashcode的