java equals和==的區(qū)別
在Java中,"=="和"equals()"是用于比較對(duì)象的兩種不同方式。
"=="運(yùn)算符:
"=="是一個(gè)比較運(yùn)算符,用于比較兩個(gè)對(duì)象的引用是否相等。它比較的是對(duì)象的內(nèi)存地址,即判斷兩個(gè)對(duì)象是否引用同一塊內(nèi)存。當(dāng)使用"=="比較兩個(gè)對(duì)象時(shí),它會(huì)返回以下結(jié)果:
如果兩個(gè)對(duì)象的引用相同(指向同一塊內(nèi)存),則返回true。
如果兩個(gè)對(duì)象的引用不同(指向不同的內(nèi)存),則返回false。
示例代碼:
javaCopy code
String str1 = "Hello";String str2 = "Hello";String str3 = new String("Hello");
System.out.println(str1 == str2); // 輸出true,因?yàn)閟tr1和str2引用同一塊內(nèi)存System.out.println(str1 == str3); // 輸出false,因?yàn)閟tr1和str3引用不同的內(nèi)存
"equals()"方法:
"equals()"是一個(gè)方法,用于比較兩個(gè)對(duì)象的內(nèi)容是否相等。它是一個(gè)被Object類定義的方法,在Java中的許多類(如String、Integer等)都重寫了該方法,以實(shí)現(xiàn)自定義的相等比較邏輯。當(dāng)使用"equals()"比較兩個(gè)對(duì)象時(shí),它會(huì)返回以下結(jié)果:
如果兩個(gè)對(duì)象的內(nèi)容相等,則返回true。
如果兩個(gè)對(duì)象的內(nèi)容不相等,則返回false。
示例代碼:
javaCopy code
String str1 = "Hello";String str2 = "Hello";String str3 = new String("Hello");
System.out.println(str1.equals(str2)); // 輸出true,因?yàn)閟tr1和str2的內(nèi)容相等System.out.println(str1.equals(str3)); // 輸出true,因?yàn)閟tr1和str3的內(nèi)容相等
需要注意的是,默認(rèn)情況下,Object類的"equals()"方法是使用"=="運(yùn)算符來進(jìn)行比較的,因此它與"=="運(yùn)算符的結(jié)果相同。但是,許多類會(huì)根據(jù)自身的需求重寫"equals()"方法,實(shí)現(xiàn)自定義的比較邏輯,比如String類會(huì)比較字符串的內(nèi)容而不是引用。因此,在使用"equals()"方法比較對(duì)象時(shí),我們需要關(guān)注具體類對(duì)該方法的重寫實(shí)現(xiàn)。
總結(jié)起來,"=="比較的是兩個(gè)對(duì)象的引用是否相同,而"equals()"比較的是兩個(gè)對(duì)象的內(nèi)容是否相等。對(duì)于引用類型的對(duì)象,我們通常使用"equals()"方法來判斷它們的內(nèi)容是否相等。