2016-04-03 54 views
0

當我試圖比較兩個int數組時,儘管它們完全相同,但if(one == two)中的代碼仍然沒有執行。爲什麼是這樣?如何比較int中的int數組

Object[] one = {1,2,3,4,5,6,7,8,9}; 

    Object[] two = {1,2,3,4,5,6,7,8,9}; 

    if (one == two){ 
     System.out.println("equal"); 
    } else { 

     System.out.println("not equal "); 
    } 
+2

你可以使用'Arrays.equals(one,two)'。請記住,這裏的順序很重要。 –

+0

謝謝你的建議。請問爲什麼我不能使用==比較兩個int數組? – Thor

+1

使用==比較兩個int數組時,實際上是比較數組引用而不是數組的內容。 –

回答

2

有幾件事情要注意這裏:

  • ==比較參考值,而不是值。 。 。也就是說,您在問這兩個數組是否是相同的確切實例,而不是它們是否包含相同的值。
  • 您使用==這一事實意味着您可能不知道Object上的equals()方法。這是而不是您需要解決這個當前問題的方法,但請注意,一般情況下,比較兩個對象的值時,應該使用obj1.equals(obj2)而不是obj1 == obj2。現在==確實使用原始像int(例如普通老x == 3等),所以也許這就是爲什麼你使用它,但我只是想確保你知道equals()==
  • 在過去的舊時代(1998年以前),您必須比較兩個陣列的每個元素對。現在,您可以在java.util.Arrays類上使用該靜態Arrays.equals()方法。此方法是重載的所有原語類型和Object(罩每個元件對下使用==)(其中,它肯定會使用equals()對於每對。)
+0

這是一個體面的答案,但問題是研究不好,並已問過之前。爲了大家的緣故:在回答之前尋找重複的東西 - 這會節省您和提問者的時間,避免重複工作。 –

1

您在比較參考文獻。比較內容,而不是用:Arrays.equals(one, two)

1

如果你這樣做:

if (one == two){ 

然後溜溜的比較2個陣列和引用不是他們的內容,並且是錯的..

做,而不是

Arrays.equals(one, two) 
2

==運算符對對象(哪個數組)進行引用相等檢查。如果數組元素是原始的(如int),則可以使用java.util.Arrays.equals。如果他們是自己的對象,java.util.Arrays.deepEquals會做一次深層相等測試(提供的數組中的對象提供的Object#equals合適的替代

2

你可以做這樣的事情:

public boolean compareArrays(int[] a, int[] b) { 
    boolean check = true; 
    if (a!= null && b!= null){ 
     if (a.length != b.length){ 
      check= false; 
     }else 
      for (int i = 0; i < b.length; i++) { 
       if (b[i] != a[i]) { 
        check= false;  
       }     
     } 
    }else{ 
     check= false; 
    } 
    return check; 
} 

或者你可以做一些事情這樣的:

boolean areEqual = Arrays.equals(Arrays.sort(arr1), Arrays.sort(arr2)); 
1

==運算符比較引用和不在java中擴展Object的所有東西的實際值。這種方法僅適用於基元。