日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java equ,Java equals方法详解

發(fā)布時間:2025/3/15 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java equ,Java equals方法详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

首先equals方法是object類的方法,所有的類都默認繼承object類,object類也就是所有類的超類。

如果兩個對象進行相等比較,需要調(diào)用x.equals(y),但是如果沒有重寫equals方法,那么默認使用的是object類的equals方法。

public boolean equals(Object obj) {

return (this == obj);

}

而在object中的equals方法是這樣定義的,如果引用地址相同,那么就證明兩個對象相同,這樣是不充分的。

String 的equals方法:

重寫object的equals方法,首先進行內(nèi)存地址的比較,然后進行數(shù)據(jù)類型的比較,然后進行字符串長度的比較,最后再進行每一個字符的比較。

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;

}

在實際開發(fā)中比較兩個自定義的對象,那么就需要進行equals方法的重寫了。

equals方法遵循以下特性:

1.自反性:對于任何非空的引用x,x.equals(x) 應(yīng)該返回true

2.對稱性,對于任何非空引用x,y ,都應(yīng)該遵循x.equsla(y)=true 和y.equals(x)=true

3.傳遞性:對于任何引用x,y,z 如果x.equsla(y)=true,那么y.equals(x)=true

4.一致性:如果X和y的引用沒有發(fā)生變化,那么反復(fù)調(diào)用x.equsla(y)返回的結(jié)果應(yīng)該相同

5.對于任意非空引用x,x.equals(null)都應(yīng)該等于false

完整的equals思路:例如x.equals(y)

1.首先檢查x==y,進行地址檢查,如果相等,這是快速的方式

2.檢查y是否等于null,如果為null則返回false

3.檢查x與y是否是同一個類,此時存在兩種檢測方式:如果不存在子類父類關(guān)系,則可以隨意使用

(1).利用instanceof進行檢查(父類定義相等關(guān)系)

(2).利用getClass進行檢查(子類定義相等關(guān)系)

4.然后對所需要對比的屬性進行比較

如果x.equals(y) ,那么x.hashCode和y.hashCode是一定相同的。

重寫equals方法,就需要重新定義hashcode()

總結(jié)

以上是生活随笔為你收集整理的java equ,Java equals方法详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。