2014-01-12 117 views
0

有人可以向我解釋爲什麼使用此代碼打印出「abeb」而不是abcb?我明白這是因爲你從list1引用list2,所以改變list2也會改變list1,但我完全不完全理解。Java Logic混淆

char [] list1 = {'a','b','c','d'};  
char [] list2 = list1;  
list2[2] = 'e';  
list1[3] = list2[1]  
for (char a: list1)  
out.print(a)` 

爲什麼在這段代碼中沒有應用相同的邏輯(我理解的邏輯)? 它打印出X爲「5」是從我從上面的代碼理解它應該是7?

int x = 5; 
int y = x; 
y += 2; 
out.print(x); 
+1

INTS不是對象。 – PakkuDon

+0

你不會改變任何事情。 – SLaks

回答

6

list2[2] = 'e'list2數組的第三個元素賦值新的值'e'。因此它修改了這個數組。 list2list1是包含對同一數組的引用的兩個變量。

之前:

list1 --> [a, b, c, d] 
     ^
      | 
list2 ---/ 

後:

list1 --> [a, b, e, d] 
     ^
      | 
list2 ---/ 

y += 2遞增變量y的值,這是從可變x的值不同:

之前:

x --> 5 
y --> 5 

後:

x --> 5 
y --> 7 
+1

我正在繪製相同的圖像:_( – Maroun

+1

<3 ascii art ;-) –

+0

所以這只是因爲list1和list2是發生這種情況的對象?由於整數不是對象,它們只是單獨處理? –

2

這是因爲,你正在做的第一工作是陣列,他們被視爲對象在Java中。

但是第二次操作是在int上完成的,這是一個原始類型。所以參考規則不適用於此。