2

メソッドでパラメーターとして使用する場合、オブジェクトとプリミティブ変数の違いを理解しようとしています。

参照変数を使用した例がいくつかあります。

public class Test1 {
    public static void main(String[] args) {
        int[] value = {1};
        modify(value);
        System.out.println(value[0]);
    }

    public static void modify(int[] v) {
        v[0] = 5;
    }
}

結果: 5

public class Test2 {

    public static void main(String agrs[]) {
        Integer j = new Integer(1);
        refer(j);
        System.out.println(j.intValue());
    }

    public static void refer(Integer i) {
        i = new Integer(2);
        System.out.println(i.intValue());
    }
}

結果: 2 | 1

では、ここで何が違うのですか?

4

4 に答える 4

5

配列参照は値渡しであることを思い出してください。配列自体はオブジェクトであり、それはまったく渡されません (つまり、配列を引数として渡すと、実際にはそのメモリ アドレスの場所が渡されます)。

メソッドでは、配列の最初の場所にmodify()割り当て5ているため、配列の値を変更しています。したがって、結果を印刷すると、次のようになります5。値が変更されているためです。

2 番目のケースでは、型の新しいオブジェクトIntegerをローカルに作成しています。iメソッドを終了すると、同じ値になりますrefer()。その中に を印刷2し、次に を印刷しますi。これは1、変更が反映されていないためです。

于 2013-07-27T10:04:26.677 に答える
3

v[0] = 5、 と言うようなものです 、 と言うGet 0th element of current v's reference and make it 5.
i = new Integer(2)ようなものですchange i to 2's Integer object reference

あるケースでは参照を介して内部値を変更し、後者では参照自体を変更しています。

于 2013-07-27T10:04:16.363 に答える