Java逻辑混乱
有人能告诉我为什么用这个代码打印出abeb而不是abcb吗?我理解这是因为您引用了列表1中的列表2,所以更改列表2也会更改列表1,但我并不完全理解这一点Java逻辑混乱,java,reference,Java,Reference,有人能告诉我为什么用这个代码打印出abeb而不是abcb吗?我理解这是因为您引用了列表1中的列表2,所以更改列表2也会更改列表1,但我并不完全理解这一点 char [] list1 = {'a','b','c','d'}; char [] list2 = list1; list2[2] = 'e'; list1[3] = list2[1] for (char a: list1) out.print(a)` 为什么我所理解的同一逻辑没有在代码中应用? 它打
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);
这是因为,您要做的第一个操作是在数组上,它们在Java中被视为对象 但第二个操作是在int上完成的,这是一个基本类型。因此引用规则在此不适用。list2[2]='e'将一个新值'e'分配给list2数组的第三个元素。因此,它会修改数组。list2和list1是包含对同一数组的引用的两个变量 之前:
list1 --> [a, b, c, d]
^
|
list2 ---/
x --> 5
y --> 5
之后:
list1 --> [a, b, e, d]
^
|
list2 ---/
x --> 5
y --> 7
y+=2增加变量y的值,该值不同于变量x的值:
之前:
list1 --> [a, b, c, d]
^
|
list2 ---/
x --> 5
y --> 5
之后:
list1 --> [a, b, e, d]
^
|
list2 ---/
x --> 5
y --> 7
你没有改变任何东西。我画的是同一幅图:\所以这只是因为list1和list2是对象,才会发生这种情况?既然整数不是对象,它们就被单独处理了?是的。list1和list2指向同一个对象,您正在修改该对象的内容。x和y指向不同的基元值,您正在修改其中一个值。如果您执行了list2=newchar[]{'a','b','e','d'},那么您还将修改list2的值,就像您在第二个示例中所做的那样,并且list1仍将引用原始数组。