在String.java中,此代码位于.equals()
方法的开头:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
// ... check if instance of String, etc.
}
此检查纯粹是出于性能原因(即不包括它会检查this
对自己的字符)吗?
答案 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