java - 如何复制二维字符串数组?

标签 java arrays pointers string

我正在使用一个使用二维字符串数组的程序(一开始可能不是那么聪明,但是呃),我想编写一个函数来接受这些数组之一(比如 array1 ), 制作一个独立的副本,并返回它(比方说 array2)。但是,当我随后更改 array2 中的值时,它似乎反射(reflect)在 array1 中。

我的函数目前看起来像这样:

public static String[][] copy(String[][] matrix, int n) {
    String[][] out = new String[n+1][n+1];
    for (int i = 0; i < n+1; i++) 
        for (int j = 0; j < n+1; j++) {
            if(matrix[i][j] != null) {
                String cp = new String(matrix[i][j]);
                out[i][j] = cp;
            }

        }

    return out;
}

我声明了一个新的字符串数组,然后遍历它,分别复制每个值。当这不起作用时,我什至尝试从每个旧字符串中显式声明一个新字符串并将其放入数组中。

谁能告诉我哪里出错了?

最佳答案

我不确定 n 参数是做什么用的,但如果我需要这样的函数,我会使用这样的东西:

public static String[][] copy(String[][] matrix) {
  String[][] copy = new String[matrix.length];
  for (int idx = 0; idx < matrix.length; ++idx)
    copy[idx] = matrix[idx].clone();
  return copy;
}

您不需要创建 String 的副本,因为它们是不可变的。正如 Michael 在评论中指出的那样,如果原始字符串是作为某个非常大的字符串的子字符串创建的,则 String(String) 构造函数可能会有用。另一个用途是当您将 String 对象用作锁(不推荐),并希望私有(private)实例避免死锁时。

此外,您在分配之前检查元素是否为 null 是不必要的;如果您的循环设置正确,则该元素保证为空。 (如果不是,覆盖它有什么坏处?)

关于java - 如何复制二维字符串数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/706763/

相关文章:

java - 如何在java中构建组合函数?

java - FileNotFoundException 加载 jar 文件,即使该文件已存在

javascript - 按顺序将 HTML 表数据保存在 Excel 文件中

c - 取消引用双指针以传递给递归函数

c++ - 为什么指向同一个对象的指针有不同的值?

Java (Android) 解密带有 IV 的 msg

java - 带括号的数学运算的正则表达式

java - 为什么我的数组不能平均所有数字?

arrays - 如何对 Perl 数组进行分页?

c++ - C、链接数据结构和双指针行为