复制对象并更改它(在 Java 中)
Copying an object and changing it (in Java)
我遇到了一个以前在 Java 中复制对象时从未遇到过的奇怪问题。
因此,我在名为 "State" 的代码中写了一个 class。这包含一些整数、一个二维数组、一个字符串等...
因此,对于一个名为 S 的 State 实例,我想制作一个名为 X 的副本(我只需编写 State X = S; 即可完成此操作)。然后我想对 X 进行更改,根据这些更改进行一些评估,然后丢弃 X 并继续使用 S。但是,我遇到的问题是 S 似乎正在获取我对 X 所做的更改。
这对我来说似乎很奇怪,因为我很确定我以前做过这样的事情但从来没有遇到过这个问题。
有什么想法吗?
(提前致谢)
I want to make a copy of it called X (I do this simply by writing State X = S; ).
这不会复制对象。
Java 中的(非基本类型的)变量是 引用 - 它们不是对象本身。通过
State X = S;
您不是在复制对象,您只是在复制引用 - 结果是您现在有两个引用同一对象的变量。如果您通过一个引用修改对象,您也会通过另一个引用看到更改。
复制对象的一种方法是使用 clone()
方法。为此,您尝试复制的对象的 class 必须实现接口 Cloneable
。另一种(可能更好)的方法是创建一个复制构造函数,并用它来复制对象:
public class State {
public State(State other) {
// initialize this object by copying content from other
}
}
// Make a copy
State X = new State(S);
您的代码没有创建对象的副本。您在那里所做的是创建一个新的引用并将其指向同一个对象。
搜索 "how to clone an object in Java"。阅读 Cloneable 接口。
我遇到了一个以前在 Java 中复制对象时从未遇到过的奇怪问题。 因此,我在名为 "State" 的代码中写了一个 class。这包含一些整数、一个二维数组、一个字符串等...
因此,对于一个名为 S 的 State 实例,我想制作一个名为 X 的副本(我只需编写 State X = S; 即可完成此操作)。然后我想对 X 进行更改,根据这些更改进行一些评估,然后丢弃 X 并继续使用 S。但是,我遇到的问题是 S 似乎正在获取我对 X 所做的更改。 这对我来说似乎很奇怪,因为我很确定我以前做过这样的事情但从来没有遇到过这个问题。
有什么想法吗? (提前致谢)
I want to make a copy of it called X (I do this simply by writing State X = S; ).
这不会复制对象。
Java 中的(非基本类型的)变量是 引用 - 它们不是对象本身。通过
State X = S;
您不是在复制对象,您只是在复制引用 - 结果是您现在有两个引用同一对象的变量。如果您通过一个引用修改对象,您也会通过另一个引用看到更改。
复制对象的一种方法是使用 clone()
方法。为此,您尝试复制的对象的 class 必须实现接口 Cloneable
。另一种(可能更好)的方法是创建一个复制构造函数,并用它来复制对象:
public class State {
public State(State other) {
// initialize this object by copying content from other
}
}
// Make a copy
State X = new State(S);
您的代码没有创建对象的副本。您在那里所做的是创建一个新的引用并将其指向同一个对象。 搜索 "how to clone an object in Java"。阅读 Cloneable 接口。