在做题时发现,直接使用=号赋值数组,当原数组改变时,被赋值的数组也会改变。
故尝试使用clone()方法赋值。
结果发现,虽然数组中的元素是相同的,但是使用equals进行比较时,得到的结果却是false。
int[][]num2 = new int[3][3];
int[][] num1 = new int[3][3];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
num1[i][j] = i+j;
}
}
num2 = num1.clone();
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
System.out.print(num1[i][j]+" ");
}
System.out.println();
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
System.out.print(num2[i][j]+" ");
}
System.out.println();
}
System.out.println(num2.equals(num1));
在输出num2前,加入语句num1[1][1] = 99;
得到
可以知道clone方法将数组1中的地址赋值给了数组2;
本质上没有达到想要的效果。
虽然很容易写出赋值和比较的代码
public static void copy(int[][]a,int[][]b) {
for (int i = 0; i <3; i++) {
for (int j = 0; j < 3; j++) {
a[i][j]=b[i][j];
}
}
}
public static boolean compare(int[][]a,int[][]b) {
for (int i = 0; i <3; i++) {
for (int j = 0; j < 3; j++) {
if (a[i][j]!=b[i][j]) {
return false;
}
}
}
return true;
}
但是java 中没有自带二维及以上数组的赋值比较方法吗,求教