我是java的初学者。在为一个小项目编写代码时,我偶然发现了一个问题,经过多次尝试后我仍然无法解决。 我有一个仅存储二维数组的小类:
class Board{
int[][] Field;
Board(int[][] field){
Field=field;
}
Board(Board Test){
this.Field=Test.Field;
}
public void change(int x, int y, int number){
Field[y][x]=number;
}
public void Print(){
System.out.println(Arrays.toString(Field[0]);
System.out.println(Arrays.toString(Field[1]);
System.out.println(Arrays.toString(Field[2]);
}
}
我的意图如下:
- 使用测试数组创建对象 Test1。
- 创建一个对象 Test2,它具有来自 Test1 的 testarray 的独立副本。
- 更改 Test2 的测试数组上的某些内容。
我用以下代码尝试了这一点:
public static void main(String[] args) {
int[][] testarray={ {0,0,0},
{0,0,0},
{0,0,0}};
Board Test1=new Board(testarray); //creates the object Test1 with the testarray
Board Test2=new Board(Test1); //creates the object Test2 with the object Test 1 as model
Test2.change(1,1,1); //changes something on the array of Test 2
Test2.Print(); //prints the array of Test2
Test1.Print(); //prints the array of Test1
}
但是当我执行代码时,对象 Test1 的数组以与更改对象 Test 2 的数组完全相同的方式更改!我已经在这个论坛上搜索过并发现了很多类似的帖子。还有各种想法如何解决这个问题,但我尝试了很多(例如使用方法clone()或arraycopy()等),但它们都不适用于我的问题(或者我只是愚蠢)。正如我所读到的,问题可能出在“this”语句上。如果有人能想出一些代码,它可以复制我的对象而不更改原始对象,我将非常感激!
非常感谢!
最佳答案
这是如何对对象进行深层复制的情况,这就是 JAVA 序列化派上用场的地方。您可以使用对象序列化来保存对象的状态并在以后随时检索它。关注link了解更多详情。
您需要做的是通过实现标记接口(interface)Serialized
将您的类标记为可序列化。
class Board implements Serializable {
.........
...........
}
编写一个关于如何保存和检索对象的额外方法。您可以从给定的链接获取代码。这将为您提供对象的精确副本,并将值保存在数组中。您可以稍后根据需要进行修改。
关于java - 如何在不更改原始对象的情况下复制对象 - java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32604257/