我正在使用一个使用二维字符串数组的程序(一开始可能不是那么聪明,但是呃),我想编写一个函数,它采用这些数组之一(比方说 array1),使一个独立的副本,并返回它(比方说 array2)。但是,当我更改 array2 中的值时,它似乎会反映在 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
参数是for,但如果我需要这样的函数,我会使用这样的东西:
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
,因为它们是不可变的。正如迈克尔在评论中指出的那样,String(String)
如果原始字符串是作为某个非常大的字符串的子字符串创建的,构造函数可能会很有用。另一个用途是当您使用String
对象作为锁(不推荐),并希望使用私有实例来避免死锁。
另外,在分配之前检查元素是否为 null 是不必要的;如果循环设置正确,则该元素保证为空。 (如果不是,覆盖它有什么坏处?)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)