Should clone array

Cette page n'est pas encore disponible en français, sa traduction est en cours.
Si vous avez des questions ou des retours sur notre projet de traduction actuel, n'hésitez pas à nous contacter.

Metadata

ID: java-best-practices/array-is-stored-directly

Language: Java

Severity: Notice

Category: Best Practices

Description

In Java, it is recommended that constructors and methods clone any arrays received through parameters. This practice prevents the original array from being affected by any future changes made by the caller.

It is advisable to clone the array before storing it to ensure that you retain a copy of the array that will remain unaffected by any external changes made to the original array. By following this approach, you can promote code safety and maintain the integrity of the original array.

Non-Compliant Code Examples

public class Foo {
    private String[] x;
    private int y;
    
    public Foo(String[] param1, int param2) {
        this.x = param1; // should make a copy of this array first
    }
}
public class Foo {
    private int[] x;
    private int y;
    
    public void foo (int[] param1, int param2) {
        this.x = param1; // should make a copy of this array first
    }
}
public class Foo {
    private String[] x;
    private int y;
    
    public void foo (String[] param1, int param2) {
        this.x = param1; // should make a copy of this array first
    }
}

Compliant Code Examples

public class Foo {
    private String[] x;
    private int y;
    
    public void foo (String[] param1, int param2) {
        this.x = Arrays.copyOf(param1, param1.length);
    }
}
public class Foo {
    private String[] x;
    private int y;
    
    private void foo (String[] param1, int param2) {
        this.x = param1; // no violation since the method is private
    }
}
https://static.datadoghq.com/static/images/logos/github_avatar.svg https://static.datadoghq.com/static/images/logos/vscode_avatar.svg jetbrains

Seamless integrations. Try Datadog Code Analysis