我已提到: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仍然会选择它并抱怨" Array直接存储"尽管制作副本。我很困惑。
感谢任何帮助!
答案 0 :(得分:2)
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]);
}
答案 1 :(得分:0)
这应该对你有用
public IndexBlockAdapter(String[] newItemStr) {
if(newItemStr == null) {
this.itemStr = new String[0];
} else {
this.itemStr = Arrays.copyOf(newItemStr, newItemStr.length);
}
}