由數組比較引出的“等于”問題

来源:互联网 发布:js数组排序方法速度 编辑:程序博客网 时间:2024/06/01 23:22

  在java中用于相等的比較運算符有“==”,“equals”。 但是它們的應用對象卻是不一樣的。下面來列舉一下它們的異同。

  1. “==”用于比較基本數據類型的數值是否相等,而它應用于對象的比較是主要比較兩個對象的名稱是否參考至同一對象,而不是比較其內容。
  2. “equals”是Object超類的一個方法,是比較兩個對象的內存地址是否相同,在java中的表現就是hashCode,如果一個對象改變了,那么它的hashCode也將改變。

問題也是由第二條引出來的,一開始我的理解equals可以用于對象的比較,那么請看下面的代碼

int[] arr1 = new int[2{12};
int[] arr2 = new int[2{12};
int[] tmp = arr1;

System.out.println( arr1.equals(arr2));             
// false
System.out.println(Arrays.equals(arr1,arr2));       // true
System.out.println(arr1.equals(tmp));               // true
System.out.println("arr1's hashCode " + arr1.hashCode + " tmp's hashCode" + tmp.hasCode +" arr2's hashCode: " + arr2.hashCode);              //看看這幾個對象的hashCode

數組也是對象,但是要是比較數組的內容是否相等并不能用arr1.equals(arr2),數組中的equals是重寫的。
在官方的docs中,寫到Object的equals相等是引用了“”符號,表明并不是真正的兩個對象的相等比較。在使用equals,“==”時要搞定出這些,避免出現不必要的錯誤。

原创粉丝点击