国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

詳解Java中“==”與equals()的區(qū)別

2019-11-26 13:09:39
字體:
來源:轉載
供稿:網友

Java中“==”與equals()的區(qū)別

 對于關系操作符“==”,《Java編程思想》中是這樣描述的:“關系操作符生成的是一個boolean結果,它們計算的是操作數(shù)的值之間的關系”。這里的操作數(shù)的“值”值得我們注意。對于8種基本數(shù)據(jù)類型(boolean,byte,char,short,int,float,double,long),它們的變量直接存儲的就是“值”。所以,我們用“==”對基本數(shù)據(jù)類型的變量進行比較時,實際比較的就是變量存儲的值,例如:

public static void main(String[] args) {    int a = 5, b = 5;    System.out.println(a == b);  }

很明顯,程序將輸出:true。但是,下面這段代碼呢?

public static void main(String[] args) {    Integer c = new Integer(5), d = new Integer(5);    System.out.println(c == d);  }

我們運行程序,發(fā)現(xiàn)輸出的是:false。這是因為Integer并非Java中的基本數(shù)據(jù)類型,其變量c、d在Java中被稱為指向對象的引用,其存儲的“值”是對象在內存中的地址,而非值“5”本身。所以,c和d實際存儲的分別是兩個value值都為“5”的Integer對象的地址,這兩個對象不在同一塊內存空間,“==”比較的結果自然是false了。

  那么equals()方法比較的是什么呢?equals()是基類Object中定義的方法,在Object類中,equals()方法定義為:

public boolean equals(Object obj) {    return (this == obj);  }

這等價于“==”。其實,equals()方法的意義在于重寫,否則對equals()的調用是沒有意義的。例如,繼承自Object的Integer類便重寫了equals()方法:

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

該方法的意義是對value值進行比較,那么如果我們對于兩個具有相同value值的Integer對象調用equals()進行比較:

public static void main(String[] args) {    Integer c = new Integer(5), d = new Integer(5);    System.out.println(c.equals(d));  }

結果便是true。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 莱阳市| 同心县| 南康市| 南部县| 惠州市| 彰武县| 叙永县| 迭部县| 吴忠市| 宝丰县| 辽宁省| 罗源县| 镇宁| 石景山区| 洪洞县| 鄂尔多斯市| 定结县| 德惠市| 盐津县| 芦溪县| 昌宁县| 呼图壁县| 开鲁县| 孝昌县| 安陆市| 青河县| 额敏县| 琼海市| 东丽区| 抚远县| 肥城市| 娱乐| 甘肃省| 天门市| 吴忠市| 梅州市| 洛隆县| 年辖:市辖区| 鄢陵县| 乐昌市| 沅陵县|