Java 如何防止数组的值发生更改

Java 如何防止数组的值发生更改,java,arrays,static,multidimensional-array,Java,Arrays,Static,Multidimensional Array,在我的程序中,我声明了一个静态int 2D数组,并将其设置为一些值。在另一种方法中,我创建了一个局部变量,并将其分配给我创建的二维数组。我对局部变量做了一些更改,但是我不想更改2D数组中的初始值。 我之所以使用static,是因为我使用的是static main方法,我认为所有其他方法和变量也必须是静态的 这是我正在做的一个简单的布局 public static int[][] myArray = {{1,2},{3,4}}; public static void main(String ar

在我的程序中,我声明了一个静态int 2D数组,并将其设置为一些值。在另一种方法中,我创建了一个局部变量,并将其分配给我创建的二维数组。我对局部变量做了一些更改,但是我不想更改2D数组中的初始值。 我之所以使用static,是因为我使用的是static main方法,我认为所有其他方法和变量也必须是静态的

这是我正在做的一个简单的布局

public static int[][] myArray = {{1,2},{3,4}};

public static void main(String args[]){
    doSomething();
}

public static void doSomething(){
    int[][] newArray = myArray;

    //do Something to newArray

}

我不想改变myArray的值有什么方法可以处理这个问题吗?我是否必须删除静态方法中的静态变量?

您必须创建数组的深度副本。您可以手动执行,也可以根据需要使用。

您必须创建阵列的深度副本。您可以手动执行,也可以根据需要使用。

阵列是可变的,因此您需要使用System.arraycopy来制作防御副本。将数组设为私有并调用一个公共方法,该方法会传递一个副本,这是防止错误发生的一种方法,方法是在不允许的情况下共享一个引用

阵列是可变的,因此您需要使用System.arraycopy制作防御副本。将数组设为私有并调用一个公共方法,该方法会传递一个副本,这是防止错误发生的一种方法,方法是在不允许的情况下共享一个引用

深度复制原始阵列并保留其中一个阵列(仅对其中一个阵列进行更改)

深度复制原始阵列并保留其中一个阵列(仅对其中一个阵列进行更改)

尝试:

int[][] newArray = Arrays.copyOf(myArray, myArray.length)
尝试:


你必须将整个数组深度复制到新数组中。@Antoniosss我该怎么做?你必须将整个数组深度复制到新数组中。@Antoniosss我该如何手动执行?你的意思是只创建新数组并将旧数组中的每个值赋给它?是的,这是一种方法。手动你的意思是只创建新数组然后将旧数组中的每个值赋给它?是的,这是一种方法。