有人可以向我解释为什么这个代码打印出“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);
答案 0 :(得分:6)
list2[2] = 'e'
为list2
数组的第三个元素分配一个新值'e'。因此它修改了数组。 list2
和list1
是两个包含对同一数组的引用的变量。
在:
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
上完成的,这是一种原始类型。因此参考规则不适用于此。