Java逻辑混乱

时间:2014-01-12 13:44:46

标签: java reference

有人可以向我解释为什么这个代码打印出“abeb”而不是abcb?我理解这是因为你从list1引用list2所以改变list2也改变了list1但是我并不完全理解它。

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);

2 个答案:

答案 0 :(得分: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 :(得分:2)

这是因为,您正在进行的第一项操作是在数组上,并且它们在Java中被视为对象

但第二项操作是在 int 上完成的,这是一种原始类型。因此参考规则不适用于此。