Java 在不同数组中存储同一对象

Java 在不同数组中存储同一对象,java,arrays,object,reference,Java,Arrays,Object,Reference,对于以下代码: User myUser = new User(); User[] array1 = new User[10]; User[] array2 = new User[10]; array1[5] = myUser; array2[5] = myUser; 对象myUser存储了两次,还是每个对象上只存储了对象的地址 如果我开始摆弄变量,这是否仍然有效,如: temp = myUser; array2[4] = temp; 另外,如果我在一个数组中更改myUser,它是否会更改另一

对于以下代码:

User myUser = new User();
User[] array1 = new User[10];
User[] array2 = new User[10];
array1[5] = myUser;
array2[5] = myUser;
对象myUser存储了两次,还是每个对象上只存储了对象的地址

如果我开始摆弄变量,这是否仍然有效,如:

temp = myUser;
array2[4] = temp;
另外,如果我在一个数组中更改myUser,它是否会更改另一个数组


编辑:最后一个问题:如何通过值而不是引用来存储它?

是的,数组中只存储对
用户
对象的引用。每个参照点指向同一对象。通过任一数组修改对象将修改同一个对象

这同样适用于在变量中存储引用,如第二个示例中所示


仅按值存储,例如
int
布尔值
char
。请注意,它们也有相应的引用类型,例如,对于
int
,您有
Integer
是,数组中只存储对
用户
对象的引用。每个参照点指向同一对象。通过任一数组修改对象将修改同一个对象

这同样适用于在变量中存储引用,如第二个示例中所示


仅按值存储,例如
int
布尔值
char
。请注意,它们也有相应的引用类型,例如,对于
int
,您有
Integer

Great的可能副本,因此它只存储一次。最后一个问题,如何避免这种情况发生。也就是说,它是按值存储的,而不是按值存储的(在数组和集合中)只有原语:int、boolean、chars等。您需要创建对象的深度副本以避免它。@YahyaUddin您必须手动创建对象的深度副本;具体情况取决于对象中数据的确切性质。典型的技术包括定义一个构造函数,该构造函数获取对象的另一个实例并复制其值,和/或重写
object.clone()
@JasonC我认为您的注释将我的注释增强到了这个程度。太好了,所以它只存储一次。最后一个问题,如何避免这种情况发生。也就是说,它是按值存储的,而不是按值存储的(在数组和集合中)只有原语:int、boolean、chars等。您需要创建对象的深度副本以避免它。@YahyaUddin您必须手动创建对象的深度副本;具体情况取决于对象中数据的确切性质。典型的技术包括定义一个构造函数,该构造函数获取对象的另一个实例并复制其值,和/或重写
object.clone()
@JasonC我认为您的注释将我的注释增强到了这个程度。