2016-09-12 11 views
-1

を複製するオブジェクト、ここで私はJavaのリファレンスがOK

public void Print(Object obj){ 
    System.out.println(obj.toString()); 
} 

public Main() { 

    LinkedList<Integer> link = new LinkedList<Integer>(); 
    LinkedList<Integer> temp = link; 

    link.push(1); 
    link.push(2); 
    temp.push(10); 

    while(link.isEmpty() == false){ 
     Print(link.getLast()); 
     link.removeLast(); 
    } 
} 

を書かれたコードは、私は一時変数ではなく、リンクの中に10を押していますので、私はそれが1 & 2を印刷することになって推測です。しかし、印刷中です。1 2 10。

ここで実際に起こっていることは何ですか?誰も私にこれを説明することはできますか?

ありがとうございました。

+1

「temp」と「link」の両方が同じ参照を指しています。どちらのオブジェクトにも行うことは、共有されている各オブジェクトへの参照に影響します。 – Orin

答えて

3

Javaリファレンスが何であるかを理解する必要があります。ヒープ上にあるオブジェクトを指します。

LinkedList<Integer> link = new LinkedList<Integer>(); 
LinkedList<Integer> temp = link; 

あなたが参照を等化しているlinkに等しいtempを設定します。両方ともヒープ上の同じオブジェクトを指します。いずれかの参照を使用してオブジェクトを変更すると、もう一方のオブジェクトも同様に表示されます。あなたは一時、リンクに依存しないようにしたい場合は

、その後、次の操作を行います。

List<Integer> link = new LinkedList<Integer>(); 
List<Integer> temp = new LinkedList<Integer>(link); 

を今、あなたは変更が表示されますヒープに10 tempにのみ、そのオブジェクトを追加するとき。

+0

ありがとうございます。あなたはそれをクリアする:) –

3

Javaにはプリミティブ型と参照変数型しかありません。あなたの変数

LinkedList<Integer> link = new LinkedList<Integer>(); // reference to a list 
LinkedList<Integer> temp = link; // another reference to the same list. 

あなたが一つの基準または他のを使用するかどうかはまだつのリストを持っているので、あなただけの、1つのnewのLinkedListを作成しました。

関連する問題