簡體   English   中英

關於Java中的數組的問題

[英]Question about arrays in Java

有人可以解釋為什么A.equals(B)false ,當我發起Bint[] B = A.clone()true要是我發起Bint[] B = A

 int[] A = {1, 2, 3, 4, 5};



    int[] B = A;
    //int[] B = A.clone();

    if(A==B){//true
        System.out.println("Equal");
    }
    if(A.equals(B)){//true
        System.out.println("Equal");

    }

顯然,Java中數組的equals方法是比較引用相等(與==相同)。

如果你克隆它,你有一個引用不同的對象 - 克隆數組。 但是,如果你只是指向它的另一個引用它是相同的。

好吧,如果你使用

int[] B = A;

那么BA指的是同一個對象,所以它們是平等的。 第一個比較(==) 肯定會AA.clone()之間返回false,因為值指的是不同的對象。 聽起來數組不會覆蓋equals (例如,像ArrayList那樣),因此克隆不等於equals方法下的原始。

編輯:的確,從語言規范部分10.7,數組成員

所有成員都繼承自Object類; 唯一沒有繼承的Object方法是它的clone方法。

換句話說,數組覆蓋clone()但不覆蓋toString / hashCode / equals

要比較Java中的數組,您可能想嘗試一下

java.util.Arrays.equals(a,b);

如果你使用a == b它們應該是不同的 - 這比較它們的內存引用。

如果你使用a.equals(b) ,它可能繼承自Object,它只使用==

這可能解釋了為什么他們首先制作了Arrays.equals()。 現在為什么他們選擇a.equals(b)來不比較元素......很難說。

你的問題由克隆()的Javadoc精確回答:

http://download.oracle.com/javase/6/docs/api/java/lang/Object.html#clone%28%29

特別:

[clone()方法]創建並返回此對象的副本。 “復制”的確切含義可能取決於對象的類別。 一般意圖是,對於任何對象x,表達式:

  x.clone() != x 

將是真的,那表達式:

  x.clone().getClass() == x.getClass() 

將是真的,但這些並非絕對要求。 通常情況是:

  x.clone().equals(x) 

將是真的, 這不是絕對的要求

int[] B = A;

使B指向內存中與A相同的對象,因此它們不僅相同,而且相同。

如果指定B = A,則將引用分配給同一對象。 使用clone(),您將獲得該對象的副本。 等於運算符(==)測試兩個符號是否引用相同的對象,其中.equals方法檢查兩個對象是否具有相同的值(由類的實現定義)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM