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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java == 与 equals 相同与不同点

發布時間:2025/3/21 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java == 与 equals 相同与不同点 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

java中與很多有意思又值得深究的點。

寫這篇文章呢,是由于在百度知道中看到一個問題:怎樣比較兩個對象是否相同。這又使我想到了另外一個問題,== 和 equals有什么不同?寫了幾行代碼,看了幾篇文章,將見解列出來,分享。

在闡述之前請大家先看一段代碼。

public class Equals {public static void main(String[] args) {Integer int1 = new Integer(1);Integer int2 = new Integer(1);String str1 = new String("Hello World");String str2 = new String("Hello World");if(int1==int2){System.out.println("int1 == int2");}if(int1.equals(int2)){System.out.println("int1 equals int2");}if(str1==str2){System.out.println("str1 == str2");}if(str1.equals(str2)){System.out.println("str1 equals str2");}} }

輸出結果:

int1 equals int2
str1 equals str2

各位也都知道,java中萬物皆對象。那么也有,java中所有聲明出來的對象全都繼承Object對象。

第一次看到這段代碼的輸出結果我也是很吃驚的,很奇怪啊。我奇怪的地方有兩點:

1、int1和int2的值明明相等,可是卻不是==,非常奇怪。

2、int1和int2明明是兩個對象,可是卻能equals相等,更加奇怪。

對于1,我奇怪的是==比較的是數值相等啊。可是兩個明明相等的值卻不想等。可是后來查了很多資料之后看到了這么一句話:

對于==,如果作用于基本數據類型的變量,則直接比較其存儲的 “值”是否相等;

如果作用于引用類型的變量,則比較的是所指向的對象的地址;(引用,原文鏈接在文末)

這就很明了了,也就是說==在比較的int1和int2的時候比的對象的地址,那么分別兩次new出來的對象地址自然不可能相同。

對于2,

public boolean equals(Object anObject) {if (this == anObject) {return true;}if (anObject instanceof String) {String anotherString = (String)anObject;int n = count;if (n == anotherString.count) {char v1[] = value;char v2[] = anotherString.value;int i = offset;int j = anotherString.offset;while (n-- != 0) {if (v1[i++] != v2[j++])return false;}return true;}}return false;}

  則可以看到,在String或者Integer中都可以看到,java對Object的equals方法進行了重寫都分別比較的是對象的值。所以才會有第二種結果的產生,其實仔細想想也是,總不可能沒有能夠正確比較的方法吧。

public boolean equals(Object obj) {if (obj instanceof Integer) {return value == ((Integer)obj).intValue();}return false;}

  

總結,即:

 1)對于==,如果作用于基本數據類型的變量,則直接比較其存儲的 “值”是否相等;

    如果作用于引用類型的變量,則比較的是所指向的對象的地址

 2)對于equals方法,注意:equals方法不能作用于基本數據類型的變量

    如果沒有對equals方法進行重寫,則比較的是引用類型的變量所指向的對象的地址;

    諸如String、Date等類對equals方法進行了重寫的話,比較的是所指向的對象的內容

原有兩段話的原文地址:http://www.cnblogs.com/dolphin0520/p/3592500.html

轉載于:https://www.cnblogs.com/yidiandhappy/p/6397635.html

總結

以上是生活随笔為你收集整理的java == 与 equals 相同与不同点的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。