Java 用户提供的阵列直接存储
我已经提到: 我的代码是Java 用户提供的阵列直接存储,java,arrays,sonarqube,Java,Arrays,Sonarqube,我已经提到: 我的代码是 public IndexBlockAdapter(String[] itemStr) { if(itemStr == null) { this.itemStr = new String[0]; } else { this.itemStr = Arrays.copyOf(itemStr, itemStr.length); } } 但声纳仍然拿起它,并抱怨“阵列直接存储”,尽管制作了一个副本。我很困惑 感谢您
public IndexBlockAdapter(String[] itemStr) {
if(itemStr == null) {
this.itemStr = new String[0];
} else {
this.itemStr = Arrays.copyOf(itemStr, itemStr.length);
}
}
但声纳仍然拿起它,并抱怨“阵列直接存储”,尽管制作了一个副本。我很困惑
感谢您的帮助
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[]str1={“1”、“2”、“3”};
字符串[]str2=Arrays.copyOf(str1,str1.length);
对于(int i=0;i
它只是复制引用,而不是实际值。
以下代码将打印所有证明事实的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[]str1={“1”、“2”、“3”};
字符串[]str2=Arrays.copyOf(str1,str1.length);
对于(int i=0;i
它只是复制引用,而不是实际值。
以下代码将打印所有证明事实的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[]str1={“1”、“2”、“3”};
字符串[]str2=Arrays.copyOf(str1,str1.length);
对于(int i=0;i
它只是复制引用,而不是实际值。
以下代码将打印所有证明事实的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[]str1={“1”、“2”、“3”};
字符串[]str2=Arrays.copyOf(str1,str1.length);
对于(inti=0;i这应该适合你
public IndexBlockAdapter(String[] newItemStr) {
if(newItemStr == null) {
this.itemStr = new String[0];
} else {
this.itemStr = Arrays.copyOf(newItemStr, newItemStr.length);
}
}
这应该对你有用
public IndexBlockAdapter(String[] newItemStr) {
if(newItemStr == null) {
this.itemStr = new String[0];
} else {
this.itemStr = Arrays.copyOf(newItemStr, newItemStr.length);
}
}
这应该对你有用
public IndexBlockAdapter(String[] newItemStr) {
if(newItemStr == null) {
this.itemStr = new String[0];
} else {
this.itemStr = Arrays.copyOf(newItemStr, newItemStr.length);
}
}
这应该对你有用
public IndexBlockAdapter(String[] newItemStr) {
if(newItemStr == null) {
this.itemStr = new String[0];
} else {
this.itemStr = Arrays.copyOf(newItemStr, newItemStr.length);
}
}
虽然这可能是复制机制被抱怨的原因,但浅层复制仍然足够。请记住:字符串是不可变的。谢谢!我认为使用System.arrayCopy()
或Object.clone()
还可以进行深度复制,这更简单。@Hirak最后,我发现真正的原因是参数的名称不能与实例变量相同。当我将参数名称更改为itemArr
时,警告消失了。虽然这可能是复制机制被抱怨的原因,但我发现了一个浅复制这就足够了。请记住:字符串是不可变的。谢谢!我认为使用System.arrayCopy()
或Object.clone()
还可以进行深度复制,这更简单。@Hirak最后,我发现真正的原因是参数的名称不能与实例变量相同。当我将参数名称更改为itemArr
时,警告消失了。虽然这可能是复制机制被抱怨的原因,但我发现了一个浅复制这就足够了。请记住:字符串是不可变的。谢谢!我认为使用System.arrayCopy()
或Object.clone()
还可以进行深度复制,这更简单。@Hirak最后,我发现真正的原因是参数的名称不能与实例变量相同。当我将参数名称更改为itemArr
时,警告消失了。虽然这可能是复制机制被抱怨的原因,但我发现了一个浅复制这就足够了。请记住:字符串是不可变的。谢谢!我认为使用System.arrayCopy()
或Object.clone()
还可以进行深度复制,这更简单。@最后,我发现真正的原因是参数的名称不能与实例变量相同。当我将参数名称更改为itemArr
时,警告消失了。