1

私がJavaを学んだとき、一度作成された配列のサイズは固定されており、変更できないと言われました。最近、配列を頻繁に使用していますが、次のようなコードでエラーが発生しないことに気付きました。

public class Test {

    private static String[][] smallArray = new String[4][4];
    private static String[][] biggerArray = new String[21][21];
    private static String[][] assignedLater;

    public static void main(String args[]){
        for(int i = 0; i < smallArray.length; i++){
            for(int j = 0; j < smallArray[0].length; j++){
                smallArray[i][j] = i + j + "";
            }
        }
        for(int i = 0; i < biggerArray.length; i++){
            for(int j = 0; j < biggerArray[0].length; j++){
                biggerArray[i][j] = i + j + "";
            }
        }
        assignedLater = smallArray;
        //last element of last row
        System.out.println(assignedLater[3][3]) //returns 6
        assignedLater = biggerArray;
        //new last element of new last row
        System.out.println(assignedLater[20][20]) //returns 40
    }
}

これで少し遊んだ後、次のことをテストしました。

public class Test {

    private static String[][] smallArray = new String[2][4];
    private static String[][] biggerArray = new String[2][21];
    private static String[][] errorArray = new String[3][21];
    private static String[][] assignedLater = new String[2][0];

    public static void main(String args[]){
        //fill arrays as in previous example
        assignedLater = smallArray;
        //last element of last row
        System.out.println(assignedLater[1][3]) //returns 6
        assignedLater = biggerArray;
        //new last element of new last row
        System.out.println(assignedLater[1][20]) //returns 21
        assignedLater = errorArray; //no error
        System.out.println(assignedLater[2][20]); // returns 22
    }
}

何が起きてる?

編集 回答ありがとうございます。不可能が実際に起こっていない理由について、私はここに啓発されています。

4

4 に答える 4

7

配列のサイズを変更していません。メモリ内の別の配列を指すように参照を変更しているだけです。

于 2013-08-09T15:34:30.123 に答える
0

配列のサイズはまったく変更されません。変数の参照を変更することです。配列のサイズを変更せずに、指す配列を変更するだけです。

于 2013-08-09T15:36:01.333 に答える