0

我有一个无法修复的奇怪错误。谁能帮我?谢谢你。

ArrayList<Choices> newSecurityChoicesList =
    securityChoicesController.getChoicesList();
System.out.println("first-" + newSecurityChoicesList.size());
securityQuestion.getChoices().clear();
System.out.println("second-" + newSecurityChoicesList.size());

一些解释:

我创造了这个newSecurityChoicesList ArrayList。它是方法中的局部变量。第一个系统打印出来的结果是 2。

为什么第二个打印出来的结果是 0?

当然是因为securityQuestion.getChoices().clear();方法。但是为什么方法可以改变方法中的局部变量呢?此方法仅在应用程序的最后调用一次。

提前致谢。

4

2 回答 2

7

您正在处理一个引用变量并更改它所引用的对象的属性。因此,虽然方法的局部变量是局部变量,但它指的是传递给该方法的对象。同样,这不是 Java 中的错误,而是您对引用变量的理解存在问题。

如果您不想更改传递给方法的 ArrayList 的状态,请在使用它之前在方法中对其进行深层复制。换句话说,您需要创建一个新的 ArrayList,然后遍历参数 ArrayList,在将原始列表中的每个项目添加到新列表之前对其进行复制。

于 2012-05-11T01:44:17.417 回答
1

是因为ArrayList<Choice>是通过引用保存的,因此您通过两个引用修改同一个对象——一个作为局部变量,另一个在securityQuestion对象中

于 2012-05-11T01:44:39.347 回答