为什么在String.java中检查另一个对象的相等性?

时间:2014-06-27 20:29:37

标签: java string

在String.java中,此代码位于.equals()方法的开头:

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    // ... check if instance of String, etc.
}

此检查纯粹是出于性能原因(即不包括它会检查this对自己的字符)吗?

3 个答案:

答案 0 :(得分:5)

是的,确实如此。由于它们是对同一个对象的引用,因此可以肯定它们是相同的。

String a = "foobar";
a.equals(a) // true

答案 1 :(得分:1)

在Java中,String是字符数组的表示。当您在该对象上调用.equals()时,它将检查数组中的每个字符,以查看它们在循环时是否相同。

.equals()开始时的比较检查是否将它与同一个对象进行比较,如果是这样,那么时间从O(n)开始(n为n的大小)字符串中的字符串)到O(1)。

答案 2 :(得分:1)

关于字符串的事情是,当它们被创建时,它们被保存在堆中以便重用..所以当你这样做时

String a = "abc";
String b = "abc"; //implicitly referencing same string object as a
a.equals(b); //true because of reference
a == b; //true because of reference

它们实际上是隐式引用堆中的同一个对象。

除非你这样做:

String a = "abc";
String b = new String("abc"); //explicitly creating a new string object
a.equals(b); //true because of value
a == b; //false because of reference