java - 用户提供的数组直接存储

标签 java arrays sonarqube

我已经提到: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/

相关文章:

java - FileUtils 在 Eclipse 插件项目中抛出错误

c - 在 C : square brackets vs. 指针中传递数组

java - 如何向 ArrayList 添加元素

php - 从数组构建递归嵌套菜单

maven-3 - Sonar Pitest 插件

java - 当我在 Thread 对象上调用 run() 时,为什么我的 Java 程序会泄漏内存?

java - 如何查找 XML 文档中的所有标签?

java - 从 Java 使用 ASP.NET 表单例份验证

java - 方法相关指标的 SonarQube 测量

java - 使用 Sonar 扫描仪扫描项目时出错