Discuss / Java / 函数引用数组的时候,没有改变内部的需求的话,最好使用克隆的办法,否则会造成代码逻辑的混乱:

函数引用数组的时候,没有改变内部的需求的话,最好使用克隆的办法,否则会造成代码逻辑的混乱:

Topic source

王日天95

#1 Created at ... [Delete] [Delete and Lock User]
import java.util.Arrays;
public class Test {
    public static void main(String[] args) {
        int[] scores = new int[] { 88, 77, 51, 66 };
        Score s = new Score(scores);
        s.printScores();
        scores[2] = 99;
        s.printScores();
    }
}

class Score {
    private int[] myscores = new int[4];
    public Score(int[] scores) {
        for(int i=0;i<scores.length;i++) {
            myscores[i] = scores[i];
        }
    }

    public void printScores() {
        System.out.println(Arrays.toString(myscores));
    }
}

printf_TZ

#2 Created at ... [Delete] [Delete and Lock User]

补充一下你的方式:

class Score {
    private int[] myscores;
    public Score(int[] scores) {
        this.scores = new int[scores.length];
        for(int i=0;i<scores.length;i++) {
            myscores[i] = scores[i];
        }
    }

    public void printScores() {
        System.out.println(Arrays.toString(myscores));
    }
}

printf_TZ

#3 Created at ... [Delete] [Delete and Lock User]

不好意思,变量名写错了:

myscores = new int[scores.length];

ncoheart

#4 Created at ... [Delete] [Delete and Lock User]
import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int[] scores = new int[] { 88, 77, 51, 66 };
        Score s = new Score(scores);
        s.printScores();
        scores[2] = 99;
        s.printScores();
    }
}

class Score {
    private int[] scores;
    public Score(int[] scores) {
        this.scores = scores.clone();
    }

    public void printScores() {
        System.out.println(Arrays.toString(scores));
    }
}

clone不香吗


  • 1

Reply