我已经提到:Security - Array is stored directly .
我的代码如下
public IndexBlockAdapter(String[] itemStr) {
if(itemStr == null) {
this.itemStr = new String[0];
} else {
this.itemStr = Arrays.copyOf(itemStr, itemStr.length);
}
}
但是 Sonar 仍然拾取它并提示“数组是直接存储的”,尽管制作了副本。我很困惑。
感谢任何帮助!
最佳答案
Arrays.copyOf does a shallow copy.
它只是复制引用而不是实际值。
下面的代码将打印所有 true
来证明事实
String [] str1 = {"1","2","3"};
String [] str2 = Arrays.copyOf(str1, str1.length);
for (int i=0;i<str1.length;i++) {
System.out.println(str1[i] == str2[i]);
}
相反,如果您使用以下代码,您将进行深度复制,并且应该很好
String [] str3 = new String[str1.length];
for (int i=0;i<str1.length;i++) {
str3[i] = new String(str1[i]);
}
for (int i=0;i<str1.length;i++) {
System.out.println(str1[i] == str3[i]);
}
关于java - 用户提供的数组直接存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23471051/