2014-03-19 26 views
0

所以我在做審查,並且遇到了我不太確定的這個問題。陣列上的代碼段java

考慮下面的代碼段:

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

int[] B = {1,2,3}; 

int[] C = A; 

此代碼後執行,這下面的表達式將評估爲真?

I. A.equals (B) 

II. A == B 

III. A ==C 

我只

II僅

三隻

我和三隻

I,II和III

我認爲這不僅是我,但我的一位同學說,它只是三號。

有人能解釋一下嗎?

感謝您的幫助。

+3

你可以很容易地測試它。 – Maroun

+0

是的,我認爲你的朋友是對的,看到這個問題的更多細節:http://stackoverflow.com/questions/8777257/equals-vs-arrays-equals-in-java – JLewkovich

+1

請使用Java變量的小寫名稱。 – Renato

回答

1

答案就在上面的鏈接的問題由@JL:

滿足Arrays.equals(數組1,數組2)的作品,你會期望(即比較 內容),array1.equals(數組2)回落Object.equals 實現,這反過來比較身份,從而更好地 取代==(純粹主義者:是的,我知道關於null)。

簡而言之,你設置C等於A,所以這就是爲什麼A == C是真的。本質上你執行Object.equals。雖然看起來A.equals(B)是真的,但它們並不是因爲Object.equals背後的內部原因。

所以你的朋友是對的。

1

第三個有a和c指向同一個對象。其他人沒有。

1

你的朋友是對的。

在代碼中你說C = A.

這意味着,C是完全相同的對象A.

在其他情況下,它們不是同一個對象,但它們具有相同的內容。

你可能想看看它返回true Arrays.deepEquals(你的代碼稍加修改):

封裝陣列;

import java.util。陣列;

public class ArraysTest { 
    public static void main(String[] args) { 
     Integer[] A = { 1, 2, 3 }; 
     Integer[] B = { 1, 2, 3 }; 
     Integer[] C = A; 
     System.out.println("A.equals(B) is " + (A.equals(B))); 
     System.out.println("Arrays.deepEquals(A, B) is " 
    + (Arrays.deepEquals(A, B))); 
     System.out.println("A == B is " + (A == B)); 
     System.out.println("A == C is " + (A == C)); 
    } 
} 

輸出將是:

A.equals(B) is false 
Arrays.deepEquals(a, b) is true 
A == B is false 
A == C is true 
1

只有第三種情況是真實的。

採取第一

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

女巫裝置A具有位置0:1,位置1:2,位置2:3。

然後採取第二

int[] B = {1,2,3}; 

女巫裝置B具有位置0:1,位置1:2,位置2:3。

所以它們具有在每個位置上是相同的值,但它們是兩個不同INT陣列

但再乘第三

int[] C = A; 

其你說`INT [] C等於INT [ ] A,

就像說

String a = "LOL"; 
String b = a; 

也只有幾個音符,在ly字符串通過使用.equals進行比較,使用==來比較其他任何內容,並且始終使用小寫字母作爲變量,這使代碼更易於使用。

你隨時可以測試這個

if(A.equals(B) 
{ 
    System.out.println("A.equals(B) is true"); 
} 
else 
{ 
    System.out.println("A.equals(B) is false"; 
} 

相同方法

if(A == B) 
{ 
    System.out.println("A == B is true"); 
} 
else 
{ 
    System.out.println("A == B is false"); 
} 

希望這有助於,盧克。