【问题标题】:How to prevent the value of an array from changing如何防止数组的值改变
【发布时间】:2014-11-11 22:31:56
【问题描述】:

在我的程序中,我声明了一个静态 int 二维数组并将其设置为等于某些值。在另一种方法中,我创建了一个局部变量并将其分配给我创建的二维数组。我对局部变量进行了一些更改,但是我不希望我的二维数组中的初始值发生变化。 我使用静态的原因是因为我使用的是静态主方法,并且我认为所有其他方法和变量也必须是静态的。

这是我正在做的简单布局

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 的值改变有没有办法处理这个问题?我必须摆脱静态方法中的静态变量吗?

【问题讨论】:

  • 你必须将整个数组深度复制到新数组中。
  • @Antoniossss 我该怎么做

标签: java arrays static multidimensional-array


【解决方案1】:

您必须创建数组的深层副本。您可以手动完成,也可以使用System.arraycopy() 来满足您的需求。

【讨论】:

  • 手动你的意思是创建新数组并将旧数组中的每个值分配给它?
  • 是的,这是一种方法。
【解决方案2】:

数组是可变的,因此您需要使用 System.arraycopy 来制作防御性副本。将数组设为私有并调用一个传递副本的公共方法是通过共享引用来防止错误错误的方法,而不必这样做。

【讨论】:

    【解决方案3】:

    深拷贝原来的,保留这两个数组之一(只修改其中一个

    【讨论】:

      【解决方案4】:

      试试:

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

      【讨论】:

        猜你喜欢
        • 2019-08-21
        • 2018-03-03
        • 1970-01-01
        • 2021-03-13
        • 1970-01-01
        • 2017-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多