回覆列表
  • 1 # 辣條兒~

    1、java中equals和==的區別 值型別是儲存在記憶體中的堆疊(簡稱棧),而引用型別的變數在棧中僅僅是儲存引用型別變數的地址,而其本身則儲存在堆中。

      2、==操作比較的是兩個變數的值是否相等,對於引用型變量表示的是兩個變數在堆中儲存的地址是否相同,即棧中的內容是否相同。

      3、equals操作表示的兩個變數是否是對同一個物件的引用,即堆中的內容是否相同。

      4、==比較的是2個物件的地址,而equals比較的是2個物件的內容,顯然,當equals為true時,==不一定為true。

  • 2 # G2黑馬

    1、java中equals和==的區別 值型別是儲存在記憶體中的堆疊(簡稱棧),而引用型別的變數在棧中僅僅是儲存引用型別變數的地址,而其本身則儲存在堆中。

    2、==操作比較的是兩個變數的值是否相等,對於引用型變量表示的是兩個變數在堆中儲存的地址是否相同,即棧中的內容是否相同。

    3、equals操作表示的兩個變數是否是對同一個物件的引用,即堆中的內容是否相同。

    4、==比較的是2個物件的地址,而equals比較的是2個物件的內容,顯然,當equals為true時,==不一定為true。

  • 3 # 小精靈zx

    解釋一下==號,他比較的是一個物件在記憶體中的地址值,

    比如2個字串物件

    String s1 = new String("str");

    String s2 = new String("str");

    如果用==號比較,會返回false,因為建立了兩個物件,他們在記憶體中地址的位置是不一樣的。

    equals的情況比較複雜,它是java.lang.Object類中的一個方法。因為java中所有的類都預設繼承於Object,所以所有的類都有這個方法。

    在Object類原始碼中是這樣寫的。

    public boolean equals(Object obj) {

    return (this == obj);

    }

    他同樣使用==號進行記憶體地址的比較。但是許多java類中都重寫了這個方法,比如String。

    public boolean equals(Object anObject) {

    if (this == anObject) {

    return true;

    }

    if (anObject instanceof String) {

    String anotherString = (String)anObject;

    int n = count;

    if (n == anotherString.count) {

    char v1[] = value;

    char v2[] = anotherString.value;

    int i = offset;

    int j = anotherString.offset;

    while (n-- != 0) {

    if (v1[i++] != v2[j++])

    return false;

    }

    return true;

    }

    }

    return false;

    }

    String裡的方法,如果==號比較不相等,還會進行一下值的比較。

    所以equals方法具體的作用要看當前的那個類是如何實現重寫父類中該方法的。如果沒有重寫該方法,那麼他和==號等價。

  • 中秋節和大豐收的關聯?
  • 求一部電影,應該是香港電影、方力申主演的?