4

StringBuilderInteger、および- の3 つのオブジェクトを使用testobjectして、メソッドに渡されて状態を変更します。

予想どおり、StringBuildertestobjectは同じオブジェクトを指し、状態は変化しますが、オブジェクトに対しては機能しませんInteger

class testobject{
    int x = 1;
}

public class test{
    public static void main(String[] args){
        StringBuilder s1 = new StringBuilder("String");
        go(s1);
        System.out.println(s1);

        Integer s2 = new Integer("20");
        go1(s2);
        System.out.println(s2);

        testobject s3 = new testobject();
        go2(s3);
        System.out.println(s3.x);
    }

    static void go(StringBuilder s1){
        s1.append("Builder");
    }

    static void go1(Integer s2){
        s2 = 1;
    }
    static void go2(testobject s3){
        s3.x = 5;
    }

結果:

StringBuilder
20
5

期待される結果:

StringBuilder
1
5
4

2 に答える 2

-1

渡す引数がプリミティブ型ではなくオブジェクトである場合、Java は値渡しの概念をサポートしているため、オブジェクト渡しを値渡しとして扱います。

ここで a と p は同じ参照です:

public class ObjPass {
    int value;
    public static void main(String[] args) {
        ObjPass p = new ObjPass();
        p.value = 5;
        System.out.println("Before calling: " + p.value);
        increment(p);
        System.out.println("After calling: " + p.value);       
    }
    public static void increment(ObjPass a){
        a.value++;

    }

}

出力:

Before calling: 5
After calling: 6        
于 2014-01-24T22:19:49.600 に答える