java - 如何在不更改原始对象的情况下复制对象 - java

标签 java object copy

我是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]);
    }
}

我的意图如下:

  1. 使用测试数组创建对象 Test1。
  2. 创建一个对象 Test2,它具有来自 Test1 的 testarray 的独立副本。
  3. 更改 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/

相关文章:

python - 在 Windows 上取消 python 中的停滞文件复制

c# - 使用c#传输文件

java - Android - Java 中的 "android:theme="是什么?

java - 优化循环更新请求

java - 使用 Android Studio 3 RC2 时出现错误 "package lombok doesn' t 存在

JavaScript:如何将对象的所有属性复制到类变量?

Javascript,将文本字段复制到新的 li 类

java - MongoTemplate 聚合 - 按日期分组

javascript - "TypeError: Cannot create proxy with a non-object as target"的 ES6 代理解决方法?

javascript - 删除对象中 JavaScript 推送函数后的逗号