【发布时间】:2015-09-16 09:11:19
【问题描述】:
我是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]);
}
}
我的意图如下:
- 使用 testarray 创建一个对象 Test1。
- 创建一个对象 Test2,它具有来自 Test1 的 testarray 的独立副本。
- 在 Test2 的 testarray 上更改一些内容。
我尝试了以下代码:
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”语句。如果有人能想出一些代码,我将非常感激,它可以在不更改原始对象的情况下复制我的对象!
非常感谢!
【问题讨论】: