2012-01-01 102 views
-2

我能理解通过以下方式==object.equal(Object obj)之间的区别是什么? :“==”与“平等(obj对象)”

这是object.equal(Object obj)返回true如果两个对象的值是相同的。虽然==返回true如果两个类型值的两个的对象是相同的。

+0

请注意'=='永远不能改变含义,但'equals()'可以。 – 2012-01-01 19:14:57

回答

5

==返回true,如果引用是完全一样的。

equals(Object)返回true时,该方法被写入返回true。这可以是同一个对象,一个等同的对象或开发人员想写的东西。

默认实现写成

public boolean equals(Object obj) { 
    return (this == obj); 
} 

,所以你可以看到它做同样的事情。

+0

我只是问关于等于(对象obj) – 2012-01-01 18:57:50

+1

的默认实现我会读的源代码,它不是很长,并会立即回答你的问题。 ;) – 2012-01-01 18:59:18

+0

我明白了,谢谢! – 2012-01-01 19:05:40

0

object.equals(Object obj)返回true当对象根据对象的属性相同取决于对象的类型以及该方法是否已经实现时。

==返回true当对象的实例是相同的。

+0

你能解释'相同'是什么意思吗?相同的类型和相同的值? – 2012-01-01 18:55:56

+0

这取决于你调用'equals'的类实际上是否实现了该方法。在一个可以比较所有字符的字符串中,如果它们是相同的,则返回true。 – Dimme 2012-01-01 18:58:06

+0

你可以考虑像equals方法用于字符串比较,==用于检查对象标识(对象位置)! – Arung 2012-01-01 19:25:58

2

java.lang.Object.equals==的默认行为是,如果引用a和b都指向同一个对象,则返回true;否则为假。

如果你想比较值,你必须覆盖等于。这就是String和其他一些类型所做的。你不是免费的;你必须覆盖从java.lang.Object的方法。

最佳阅读约书亚布洛赫的“有效的Java” chapter 3,看看如何正确地做到这一点。

+0

那么,这两者有什么区别? – 2012-01-01 18:56:29

+0

+1链接到布洛赫的章节。 – 2012-01-01 19:08:21

+0

'=='总是指引用同一个对象。 “equals”的含义取决于您调用的“equals”方法的对象类型。 – 2012-01-01 19:10:04

0

的Object.Equals实现是:

public class Object { 
    public boolean equals(Object obj) { 
     return (this == obj); 
    } 
} 

这将返回true只有当obj是完全一样的对象this。就像Peter Lawrey在他的回答中所说的,任何其他类别的定义equals完全取决于它是如何编码的。甚至没有要求两个对象是相同的类,甚至没有层次相关的类。

请注意,定义equals而不定义hashcode通常被认为是不好的做法。要求两个对象equal必须返回相同的哈希码。

+0

不错,谢谢。 – 2012-01-01 19:26:09