亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中==和equals的使用方法

發布時間:2020-06-23 15:06:18 來源:億速云 閱讀:121 作者:元一 欄目:編程語言

這期內容當中小編將會給大家帶來有關java中==和equals的使用方法,以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

equals的分析

1、先看一個equals比較的例子:

public class TestEquals {
	public static void main(String[] args) {
		
		TestEquals t1 = new TestEquals();
		TestEquals t2 = new TestEquals();
		System.out.println(t1.equals(t2));  //false
		
		String s1 = new String();
		String s2 = new String();		
	
        System.out.println(System.identityHashCode(s1));
		System.out.println(System.identityHashCode(s2));
		System.out.println(System.identityHashCode(new String()));
		System.out.println(System.identityHashCode(new String()));
        System.out.println(s1.equals(s2));  // true
	}
}

輸出結果:
false
366712642
1829164700
2018699554
1311053135
true

2、分析:

①t1和t2的比較是false,而s1和s2的比較是true,這里就涉及到了equals方法的重寫問題,先看 Object類 中equals的源碼:

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

② 對于s1.equals(s2) ,this就是s1,obj是s2,而源碼中的比較用的是==,很明顯是引用數據類型的比 較,看的是s1和s2的內存地址,上面的分析已經知道他們的地址不一樣,所以結果自然就是false.

③而s1和s2的比較結果是true,這是因為在String類中,equals方法被重寫了,看源碼:

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;
    }

④通過和object中equals源碼的對比可以看出,String中的equals方法比較的不再是對象的地址,而是看 兩個對象內容,或者兩個對象的屬性是否都一樣。

⑤像String,Date,File…等類都對equals方法進行了重寫。

1、對于基本數據類型,比較的是他們的具體內容是不是一樣,跟他們的內存地址無關。

舉個例子:

public class Test{
	
	public static void main(String[] args) {
		int i = 10;
		double j = 10.0;
		float m = 10.0f;
		char k = 10;
		boolean b = true;
		
		System.out.println(i == j);
		System.out.println(i == m);
		System.out.println(m == k);
		System.out.println("*******************");
		//System.out.println(i == b);  很明顯,布爾型不能和其他基本數據類型比較,編譯報錯.
		System.out.println(System.identityHashCode(i));
		System.out.println(System.identityHashCode(j));
		System.out.println(System.identityHashCode(m));
		System.out.println(System.identityHashCode(k));
		System.out.println(System.identityHashCode(b));
	}
}

輸出:

true
true
true
*******************
366712642
1829164700
2018699554
1311053135
118352462

==分析:

①根據比較的結果和內存地址來看,內容一樣,內存地址不一樣,但是返回的結果都是true,說明比較的 時候只看變量中存儲的內容是否相同,而跟內存地址無關。

②==比較的兩邊數據需要能強制轉換成同一類型,比如int和double的比較,會強制轉換到double。

③布爾類型不能和int,float,double,char等基本數據類型做比較,編譯時就報錯。

2、對于引用數據類型的比較:

public class Test{
	
	public static void main(String[] args) {
		Test t1 = new Test();
		Test t2 = new Test();
        String name1 = "瓊寶";
		String name2 = "瓊寶";
		
		System.out.println(name1 == name2);						 // true
		System.out.println(System.identityHashCode(name1));		 //366712642	
		System.out.println(System.identityHashCode(name2));		 //366712642
		
		System.out.println(t1 == t2);                             //false
		System.out.println(System.identityHashCode(t1));          //366712642
		System.out.println(System.identityHashCode(t2));          //1829164700
        System.out.println(System.identityHashCode(new Test()));  //2018699554
		System.out.println(System.identityHashCode(new Test()));  //1311053135
        System.out.println(new Test() == new Test());
	}
}

輸出:

true
366712642
366712642
false
366712642
1829164700
2018699554
1311053135
false

分析:

①對于引用數據類型,此時涉及到兩塊內存的問題, 而且比較的也是內存地址是否相同,比如執行語句:

Test t1 = new Test() Test t2 = new Test()時,會開辟兩塊內存,一塊用于儲存t1 t2 ,一 塊用于儲存兩個 new Test()。而很明顯的是,t1和t2的內存地址不一樣,就連兩個new Test()的地 址都不一樣,所以此時用==來比較的時候,結果必然是false.

(補充:t1和t2中存儲的其實是new Test() 對象使用的內存的首地址。)

②對于String類型來說,內容相同的時候,其內存地址也相同,比較的時候看的也是地址。

如果要比較對象中存儲的內容是否相同(不是比較地址),那么==就無法實現,此時需要equals。

總結:

1.==用于比較基本數據類型時,比較的是內容是否相等,比較引用數據類型時,看的是內存地址是否相等。

2.equals只能比較引用數據類型(對象),沒被重寫之前,使用==來比較內存地址,重寫后比較的是對象的具 體內容和屬性是否一致。

上述就是小編為大家分享的java中==和equals的使用方法了,如果您也有類似的疑惑,不妨參照上述方法進行嘗試。如果想了解更多相關內容,請關注億速云行業資訊。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

贡山| 泾阳县| 五峰| 阳朔县| 宾阳县| 平罗县| 什邡市| 大兴区| 垫江县| 景泰县| 台南市| 乌恰县| 黄陵县| 大兴区| 永兴县| 巴彦县| 临洮县| 南乐县| 阿尔山市| 桃园县| 萨迦县| 德州市| 济阳县| 巴林左旗| 房产| 乳山市| 台北县| 许昌市| 夏河县| 子长县| 科技| 图们市| 安岳县| 澜沧| 微博| 利津县| 兰溪市| 绥江县| 荣昌县| 中西区| 民乐县|