Java逻辑混乱

Osc*_*r F 0 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)`
Run Code Online (Sandbox Code Playgroud)

为什么在此代码中没有应用相同的逻辑(我理解的逻辑)?它打印出x作为"5"是从我从上面的代码中理解它应该是7?

int x = 5;
int y = x;
y += 2;
out.print(x);
Run Code Online (Sandbox Code Playgroud)

JB *_*zet 6

list2[2] = 'e'将新值'e'分配给list2数组的第三个元素.因此它修改了数组.list2并且list1是包含对同一数组的引用的两个变量.

之前:

list1 --> [a, b, c, d]
          ^
          |
list2 ---/
Run Code Online (Sandbox Code Playgroud)

后:

list1 --> [a, b, e, d]
          ^
          |
list2 ---/
Run Code Online (Sandbox Code Playgroud)

y += 2递增变量y的值,该值与变量的值不同x:

之前:

x  --> 5
y  --> 5
Run Code Online (Sandbox Code Playgroud)

后:

x --> 5
y --> 7
Run Code Online (Sandbox Code Playgroud)