Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java逻辑混乱_Java_Reference - Fatal编程技术网

Java逻辑混乱

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)` 为什么我所理解的同一逻辑没有在代码中应用? 它打

有人能告诉我为什么用这个代码打印出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)`
为什么我所理解的同一逻辑没有在代码中应用? 它打印出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仍将引用原始数组。