【发布时间】:2021-03-29 13:09:23
【问题描述】:
我是 Java 新手,遇到了一个我找不到解决方案的问题,所以也许有人可以帮助我。当我写这段代码时:
ArrayList<String> Liste = new ArrayList<>();
String Name;
Liste.add("Harry");
Name = Liste.get(0);
Name = "Dieter";
System.out.print(Liste.get(0));
System.out.print(Name);
输出如预期:
Harry
Dieter
但是,如果我将类型更改为自定义对象:
ArrayList<Names_Class> Liste = new ArrayList<>();
Names_Class Name;
Liste.add(new Names_Class());
Liste.get(0).First_Name = "Harry";
Name = Liste.get(0);
Name.First_Name = "Dieter";
System.out.print(Liste.get(0));
System.out.print(Name);
输出变成:
Dieter
Dieter
所以看起来 Java 只复制了一个引用或其他东西。有人可以解释这里发生了什么,以及如何从 ArrayList 中获取单个项目的完整副本吗?
【问题讨论】:
-
"似乎 java 只复制了一个引用" 没错。这就是为什么它们(
Liste和Name)被称为引用变量。 -
仅供参考: Java 命名约定是 变量 名称以小写字母开头,因此它们应该是
liste和name。