java equ,Java equals方法详解
首先equals方法是object類的方法,所有的類都默認繼承object類,object類也就是所有類的超類。
如果兩個對象進行相等比較,需要調用x.equals(y),但是如果沒有重寫equals方法,那么默認使用的是object類的equals方法。
public boolean equals(Object obj) {
return (this == obj);
}
而在object中的equals方法是這樣定義的,如果引用地址相同,那么就證明兩個對象相同,這樣是不充分的。
String 的equals方法:
重寫object的equals方法,首先進行內存地址的比較,然后進行數據類型的比較,然后進行字符串長度的比較,最后再進行每一個字符的比較。
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String) anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
在實際開發中比較兩個自定義的對象,那么就需要進行equals方法的重寫了。
equals方法遵循以下特性:
1.自反性:對于任何非空的引用x,x.equals(x) 應該返回true
2.對稱性,對于任何非空引用x,y ,都應該遵循x.equsla(y)=true 和y.equals(x)=true
3.傳遞性:對于任何引用x,y,z 如果x.equsla(y)=true,那么y.equals(x)=true
4.一致性:如果X和y的引用沒有發生變化,那么反復調用x.equsla(y)返回的結果應該相同
5.對于任意非空引用x,x.equals(null)都應該等于false
完整的equals思路:例如x.equals(y)
1.首先檢查x==y,進行地址檢查,如果相等,這是快速的方式
2.檢查y是否等于null,如果為null則返回false
3.檢查x與y是否是同一個類,此時存在兩種檢測方式:如果不存在子類父類關系,則可以隨意使用
(1).利用instanceof進行檢查(父類定義相等關系)
(2).利用getClass進行檢查(子類定義相等關系)
4.然后對所需要對比的屬性進行比較
如果x.equals(y) ,那么x.hashCode和y.hashCode是一定相同的。
重寫equals方法,就需要重新定義hashcode()
總結
以上是生活随笔為你收集整理的java equ,Java equals方法详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux添加定时器防抖,linux驱动
- 下一篇: linux bash lsnrctl,[