詳解Java中“==”與equals()的區(qū)別
Java中“==”與equals()的區(qū)別
對于關(guān)系操作符“==”,《Java編程思想》中是這樣描述的:“關(guān)系操作符生成的是一個boolean結(jié)果,它們計算的是操作數(shù)的值之間的關(guān)系”。這里的操作數(shù)的“值”值得我們注意。對于8種基本數(shù)據(jù)類型(boolean,byte,char,short,int,float,double,long),它們的變量直接存儲的就是“值”。所以,我們用“==”對基本數(shù)據(jù)類型的變量進(jìn)行比較時,實際比較的就是變量存儲的值,例如:
public static void main(String[] args) {
int a = 5, b = 5;
System.out.println(a == b);
}
很明顯,程序?qū)⑤敵觯簍rue。但是,下面這段代碼呢?
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中被稱為指向?qū)ο蟮囊茫浯鎯Φ摹爸怠笔菍ο笤趦?nèi)存中的地址,而非值“5”本身。所以,c和d實際存儲的分別是兩個value值都為“5”的Integer對象的地址,這兩個對象不在同一塊內(nèi)存空間,“==”比較的結(jié)果自然是false了。
那么equals()方法比較的是什么呢?equals()是基類Object中定義的方法,在Object類中,equals()方法定義為:
public boolean equals(Object obj) {
return (this == obj);
}
這等價于“==”。其實,equals()方法的意義在于重寫,否則對equals()的調(diào)用是沒有意義的。例如,繼承自O(shè)bject的Integer類便重寫了equals()方法:
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
該方法的意義是對value值進(jìn)行比較,那么如果我們對于兩個具有相同value值的Integer對象調(diào)用equals()進(jìn)行比較:
public static void main(String[] args) {
Integer c = new Integer(5), d = new Integer(5);
System.out.println(c.equals(d));
}
結(jié)果便是true。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
java中char對應(yīng)的ASCII碼的轉(zhuǎn)化操作
這篇文章主要介紹了java中char對應(yīng)的ASCII碼的轉(zhuǎn)化操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08
Java實現(xiàn)將導(dǎo)出帶格式的Excel數(shù)據(jù)到Word表格
在Word中制作報表時,我們經(jīng)常需要將Excel中的數(shù)據(jù)復(fù)制粘貼到Word中,這樣則可以直接在Word文檔中查看數(shù)據(jù)而無需打開另一個Excel文件。本文將通過Java應(yīng)用程序詳細(xì)介紹如何把帶格式的Excel數(shù)據(jù)導(dǎo)入Word表格。希望這篇文章能對大家有所幫助2022-11-11

