-6

わからない例が2つあります

Javaは値を変数として渡すか、参照によって渡します

Refクラスで整数変数が変更されないのはなぜ(null)ですか?RefColクラスでコレクション変数が変更されるのはなぜcol(1)ですか?

クラス参照:

test(): entero: 5

inicio(): entero: null

クラスRefCol:

test(): col: [1]

inicio(): col: [1] 

import java.util.Collection;
import java.util.Vector;


public class Ref {

    public static void main(String[] args){
        Ref ref = new Ref();
        ref.inicio();
    }

    public void inicio(){
        Integer entero = null;
        test(entero);
        System.out.println("inicio(): entero: " + entero);
    }

    public void test(Integer entero){
        entero = new Integer(5);
        System.out.println("test(): entero: " + entero);
    }

}





public class RefCol {

    public static void main(String[] args){
        RefCol ref = new RefCol();
        ref.inicio();
    }

    public void inicio(){
        Collection col = new Vector();
        test(col);
        System.out.println("inicio(): col: " + col);
    }

    public void test(Collection col){
        col.add( new Integer(1) );
        System.out.println("test(): col: " + col);
    }

}
4

4 に答える 4

3

REFERENCEのCOPYをオブジェクトインスタンスに渡します。

オブジェクトを直接変更した場合。たとえばcol.add、基になるオブジェクトを変更します。

オブジェクトを変更すると、それが参照しています。たとえばnew Integer()、ローカル変数の参照のみを変更します。

于 2013-02-27T10:54:18.913 に答える
3

同じことではありません。

entero = new Integer(5);

参照を変更しますenteroが、

col.add(new Integer(1));

参照されるオブジェクトを変更しますcol

于 2013-02-27T10:54:22.127 に答える
-2

つまり、プリミティブ型と「プリミティブ ラッパー (Integer、Long、Short、Double、Float、Character、Byte、Boolean)」は、参照によって変更できません。

詳細については、http://en.wikipedia.org/wiki/Immutable_objectを確認してください

于 2013-02-27T10:55:49.457 に答える
-4

{ ここで作成されたオブジェクトは、ブレースの終了後に破棄されます(})

}

于 2013-02-27T11:04:07.427 に答える