閱讀263 返回首頁    go 魔獸


Java中的==、equals及hashCode

java中的== 和equals連個比較運算符是比較容易混淆的.

我們現在分別來談談什麼是 == 什麼是equals
==
Java中的==可以用於基本類型及引用類型;
** 當用於基本數據類型的時候,其意義在於""==""臉變得值是否相等.**

class Riven{
    public static void main(String[] args) {
        int A = 10;//基本類型
        int B = 10;//基本類型

        int C = 10;//基本類型
        int D = 10;//基本類型

        /**
         * 此時符號==代表的A 的值 和 B 的值是否相等
         */
        boolean flag = (A == B);

        /**
         * 此時符號==代表的C 的值 和 D 的值是否相等
         */
        boolean flag2 = (C == D);
        System.out.println(flag);
        System.out.println("=============我是分隔符=============");
        System.out.println(flag2);
    }
}

輸出:
true
=============我是分隔符=============
true

當==符號用於引用類型的時候,其意義在於 比較雙方對象是否相同
當然,對於String a = ""啊""和Inreger i = 1對象的創建方式,==比較的方式你也可以姑且看作是值得比較.

本質:
在Java中,""==""比較變量是,比較的就是係統"棧"中的內容,也就是棧中的值
基本數據類型在棧中的值就是其內容,而對象類型在棧中存儲的是一個引用地址,這個地址就是對象在堆中的位置.對於"=="需要記住的就是以上內容

equals:
首先你需要名曲的就是基本數據類新沒有equals方法,
第二,你需要明白的是,所有的類都有equals方法,因為一個類如果沒有定義equals方法,它將默認繼承Object中的equals方法,返回值與==方法相同.
本質:
java.lang包中的Object類有public boolean equals(Object obj)方法,它比較兩個對象是否相等
boolean equals(Object o){
return this==o;
}
所以,如果你沒有覆蓋該方法,那麼class A == class B 與 class A.equals(class B)的意義是一樣的的;(注意:String和基本包裝類型已經覆蓋了該方法)
下麵是代碼的參考:

class Ahir{
    String name;
    public Ahir(String name) {
        System.out.println("實例化一個"+name);
        this.name = name;
    }
}

class Akali{
    String name;

    public Akali(String name) {
        System.out.println("實例化一個"+name);
        this.name = name;
    }
}

class Amumu{
    public static void main(String[] args) {
        /**
         * 雖然實例化對象的時候使用的名字都是一個,但是new 出來的對象都是凡在堆中的,在沒有覆蓋equals的
         * 情況下 使用的是其超類(Object)的equals方法 其源代碼如下:
         *   public boolean equals(Object obj) {
         *        return (this == obj);
         *    }
         *    所以說,在沒有覆蓋超類equals方法的情況下使用equals方法其本質和"=="沒有區別,因為其底層實現還是使用的"=="
         *
         */
        Ahir ahir = new Ahir("阿狸");
        Ahir ahir1 = new Ahir("阿狸");

        Akali akali = new Akali("阿卡麗");
        Akali akali2 = new Akali("阿卡麗");
        boolean equals = ahir.equals(akali);
        System.out.println(equals); //false
        boolean equals1 = ahir.equals(ahir1);
        System.out.println(equals1); //false
    }

}

其詳細情況可以參考:

https://blog.csdn.net/u010940300/article/details/44153967

最後更新:2017-05-24 20:01:20

  上一篇:go  阿裏雲VPN網關部署實踐
  下一篇:go  阿裏雲使用開篇