equals()和==的區分
阿新 • • 發佈:2018-01-10
eof 默認 引用 pre this 有變 均可 another log
1.==是一個操作符,用於比較兩個引用的值是否相等。
2.equals()是Object中的一個方法,默認實現如下。可以看到,在Object中,equals()方法與==操作符的效果相同。
1 public boolean equals(Object obj) { 2 return (this == obj); 3 }
2.1 equals()的重寫版本
由於Object是java所有類的父類,所以java類均可以根據需要重寫equals()方法。
因此,需要特別註意的是:不同的對象或者類,其equals()方法的實現可能是不同的。
2.1.1 String類中equals()的重寫版本
1 public boolean equals(Object anObject) { 2 if (this == anObject) {//如果兩個引用相等,則直接返回true; 3 return true; 4 } 5 if (anObject instanceof String) {//如果傳入的對象是String類型,則比較兩個String的值。值相等,則返回true; 6 String anotherString = (String) anObject; 7 intn = value.length;//value是String類中的一個私有變量,是一個char數組,用於存儲該String實例的字符。 8 if (n == anotherString.value.length) { 9 char v1[] = value; 10 char v2[] = anotherString.value; 11 int i = 0; 12 while (n-- != 0) { 13 if(v1[i] != v2[i]) 14 return false; 15 i++; 16 } 17 return true; 18 } 19 } 20 return false; 21 }
java類庫中均對equals()方法進行重寫,String類中的實現如上。可以看到,返回true的條件是:
(1)傳入的對象引用與該String引用相等;
(2)傳入的對象是String類的一個實例且值與String的值相等。
equals()和==的區分