Java中equals() & ==的异同,可以通过翻阅JDK源码java.lang.String.equals(Object anObject)的来获得一个感性认识:
1 /** 2 * Compares this string to the specified object. The result is {@code 3 * true} if and only if the argument is not {@code null} and is a {@code 4 * String} object that represents the same sequence of characters as this 5 * object. 6 * 7 * @param anObject 8 * The object to compare this {@code String} against 9 * 10 * @return {@code true} if the given object represents a {@code String} 11 * equivalent to this string, {@code false} otherwise 12 * 13 * @see #compareTo(String) 14 * @see #equalsIgnoreCase(String) 15 */ 16 public boolean equals(Object anObject) { 17 if (this == anObject) { 18 return true ; 19 } 20 if (anObject instanceof String) { 21 String anotherString = (String)anObject; 22 int n = count ; 23 if (n == anotherString.count ) { 24 char v1[] = value ; 25 char v2[] = anotherString.value ; 26 int i = offset ; 27 int j = anotherString.offset ; 28 while (n-- != 0) { 29 if (v1[i++] != v2[j++]) 30 return false ; 31 } 32 return true ; 33 } 34 } 35 return false; 36 }
从上面可以看到java.lang.String.equals(Object anObject)方法返回true的情况:
- 自己与自己比较;
- 两个对象都是String,且内容相同。
需要注意的:
- Java不支持运算符重载(Operator Overloading);
- Java中equals()和hashCode()紧密联系,这两个方法被重写(Overriding),所以equals()的的具体含义要看代码实现。