1. 程式人生 > >equals()和==的區分

equals()和==的區分

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             int
n = 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()和==的區分