gpt4 book ai didi

java 对象在不设置的情况下发生变化

转载 作者:行者123 更新时间:2023-11-30 02:57:58 26 4
gpt4 key购买 nike

我试图了解以下代码是如何工作的:

public class Sample {

public static void main(String[] args) {
Name defaultName = new Name();
defaultName.setFirstName("defaultfirst");
defaultName.setLastName("defaultlast");

Name name1 = new Name();
name1.setFirstName("name1First");
name1.setLastName("name1Last");

Name name2 = new Name();
name2.setFirstName("name2First");
name2.setLastName("name2Last");

List<Name> namesNew = new ArrayList<Name>();
namesNew.add(name1);
namesNew.add(name2);

List<Name> names = new ArrayList<Name>();
for(int i=0;i<2;i++){
Name name = defaultName;
name.setFirstName(namesNew.get(i).getFirstName());
name.setLastName(namesNew.get(i).getLastName());
System.out.println(i+ " name " +name);
names.add(name);
System.out.println(i +" " +names);
}

System.out.println(names);

}

}

当执行第一个循环时,名称[0]的值被设置为名称1,但在执行发送循环之后,名称[1]并且名称[0]也更改为名称2,即使我没有设置名称[0] 该代码中的任何位置。

有人可以告诉我这是如何表现的,以及我应该做什么才能使名称[0]不改变。

最佳答案

不要这样做:

Name name = defaultName;

这样,您就可以不断更改 for 循环中单个对象的状态,而这不是您想要的。相反,在循环中创建一个新的 Name 对象:

Name name = new Name();

关于java 对象在不设置的情况下发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36732221/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com