我有
Object o = new Object()
o == o.clone(); //I understand this should be false since it's different two arraylist pointing to the same object right?
o.equals(o.clone()) //it's true if it's shallow copy since pointing at the same one
这里equals不是==,它应该在比较哈希码吗?因为它是对象 来源:equals method usage in string and list
但在我的笔记上说,这里的equal方法表示==。
我的笔记错了吗?
我的笔记说该对象类具有aclone()方法,但其实现为空, 并且由于这个原因,不允许对象类的对象调用此方法。
有人可以解释一下这个更好的方法吗?我想我误会了
答案 0 :(得分:1)
==
比较对象引用-它们是否是完全相同的内存引用。 equals
是每个类实现的方法,通常用于进行更有用的比较(例如,如果两个字符串包含相同的字符,或者两个列表包含相同的内容)。
但是,Object
中的默认实现只是回退到进行==
比较,因此对于该类的实例而言,没有什么区别。
答案 1 :(得分:0)
==
在对象引用的上下文中检查对象身份。
Foo f1 = new Foo();
Foo f2 = f1; // Both f1 and f2 refer to the same object.
// f1 == f2 returns true
Foo f3 = new Foo(); // A second instance of Foo is created
// f1 == f3 returns false
仅在原始数据类型(boolean
,byte
,short
,int
,long
,char
,{{ 1}}和float
)double
检查值。 1
==
方法仅是使对象能够将自己与其他对象进行比较的方法。 equals
的文档对程序员应如何实现该方法提出了要求,但从技术上讲,程序员可以做他想做的任何事情。
equals
的实现只是Object.equals(Object)
。
return this == obj)
方法永远不要依赖或调用equals
,因为根据hashCode()
被认为不相等的两个对象可能会具有相同的哈希码。 equals
的唯一要求是相反的方式:它必须为通过hashCode
方法被认为相等的所有对象返回相同的哈希码。
1 正如安德烈亚斯(Andreas)在评论中已经提到的那样–从技术上讲equals
总是检查值。这也适用于对象引用,因为对象引用本身就是值。