gpt4 book ai didi

java - ArrayList中的对象正在改变

转载 作者:行者123 更新时间:2023-12-01 17:04:02 25 4
gpt4 key购买 nike

我编写了一个测试程序,因为我想在 PL/SQL 工作之后重新回到 Java。我创建了一个 Numbers 类,其中包含一个整数、一个 getter 和一个 setter。我有另一个类 Test 正在创建 Numbers 的实例,并将该实例添加到列表中。我创建了一个 for 循环,该循环循环两次并将 Numbers 中的整数值设置为等于 i。然后,我将该 Numbers 实例添加到列表numbersList 中。然后,我打印添加到列表中的值的屏幕。我总共打印了3次,第一次通过循环打印,打印列表中的第一个位置,然后在第二次循环中打印两次,再次打印列表中的第一个位置,然后打印第二个位置在列表中。我期望得到 0,0,1 结果。我得到的结果是 0,1,1,但我不明白为什么。在第二次循环期间,我没有更改列表中第一个位置 (numbersList[0]) 中的任何内容,我所做的只是将 Numbers 实例添加到列表中第二个位置 (numbersList[1]) 中。

import java.util.ArrayList;
import java.util.List;

public class Tests {
static int x;

public static void main(String[] args) {
List<Numbers> numbersList = new ArrayList<Numbers>();
Numbers numbers = new Numbers();
Numbers numbers2 = new Numbers();
for (int i = 0; i < 2; i++) {
if (i == 0) {
numbers.setVariable(i);
numbersList.add(numbers);
System.out.println(numbersList.get(0).getVariable());
}

if (i > 0) {
numbers2.setVariable(i);
numbersList.add(numbers2);
System.out.println(numbersList.get(0).getVariable());
System.out.println(numbersList.get(1).getVariable());
}
}
}
}

public class Numbers {
public static int a = 5;

public static void setVariable(int b) {
a = b;
}

public static int getVariable() {
return a;
}
}

最佳答案

public static int a = 5 表示由于 static 关键字,所有 Numbers 实例共享同一个变量。

因此,当您执行 numbers2.setVariable(i); 时,numbers 的变量也会更改。因此0,1,1

如果您想要实例变量,请从 Numbers 中删除 static 关键字。

关于java - ArrayList中的对象正在改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26351526/

25 4 0