基礎面試題:== 與 equals 詳解

​java中的數據類型分爲: 基本數據類型和引用數據類型

基礎類型

4種整數類型:int、long、byte、short
2種浮點數類型:float、double
1種字符類型:char
1種布爾類型:boolean

引用數據類型

1.類
2.接口
3.數組

對於基本類型來說,== 比較的是值是否相等
對於引用類型來說,== 比較的是兩者在內存中存放的地址(堆內存地址)

public class test1 {
    public static void main(String[] args) {
        String a = new String("ab"); // a 爲一個引用
        String b = new String("ab"); // b爲另一個引用,對象的內容一樣
        String aa = "ab"; // 放在常量池中
        String bb = "ab"; // 從常量池中查找
        if (aa == bb) // true
            System.out.println("aa==bb");
        if (a == b) // false,非同一對象
            System.out.println("a==b");
        if (a.equals(b)) // true
            System.out.println("aEQb");
        if (42 == 42.0) { // true
            System.out.println("true");
        }
    }
}

說明:

String 中的 equals 方法是被重寫過的,因爲 object 的 equals 方法是比較的對象的內存地址,而 String 的 equals 方法比較的是對象的值。
當創建 String 類型的對象時,虛擬機會在常量池中查找有沒有已經存在的值和要創建的值相同的對象,如果有就把它賦給當前引用。如果沒有就在常量池中重新創建一個 String 對象。

總結
equals()和==的區別:

基本類型:對比它們的值是否相等
引用類型:對比它們的內存地址是否相等
equals()
引用類型:默認情況下,對比它們的地址是否相等;如果equals()方法被重寫,則根據重寫過程來比較

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章