1

リンクされたリストを格納する L という名前のリンクされたリストがあるとします。

LinkedList <LinkedList<String>> L

もしそうなら、それL1 = L.getLast()は最後のリストに「何か」を追加するL.getLast.add("something")L1.add("something")、それともそのリストのローカルインスタンスのみに追加しますか?

4

3 に答える 3

1

それは最後のリストに「何か」を追加しますか、それともそのリストのローカルインスタンスのみに追加しますか?

2 つの参照 (インスタンスではない) が指す同じリストに追加するため、両方のコード行は同じように機能します。

与えられた

LinkedList <LinkedList<String>> L

次の 2 つのフラグメントはまったく同じように機能します

  • 最後のノードを指すローカル参照(あなたが書いたインスタンスとは呼ばれません)を持っています。

    L1 = L.getLast() 
    
    L1.add("something") 
    
  • ローカル参照はありませんが、外部に格納されている参照を使用していますLinkedList L

    L.getLast.add("something") 
    
于 2012-10-31T07:04:51.193 に答える
0

「そのリストのローカルインスタンス」とはどういう意味ですか? ここでは参照型を扱っています。外側のリストに格納されているのは、単にリストのインスタンスへの参照です。最後の要素を取得すると、参照のコピーが取得されます。オブジェクトにどのようにアクセスするかは問題ではありません。その単一のオブジェクトを変更しているだけです。

を作成することで、例を必要以上に複雑にしましたLinkedList<LinkedList<String>>が、基本的に、これは で簡単に実証できるのと同じ問題StringBuilderです。

StringBuilder x = new StringBuilder();
StringBuilder y = x; // Copies the *reference*, not an object
y.append("foo");
System.out.println(x); // Prints "foo"

繰り返しますが、単一のStringBuilderオブジェクトがあり、両方の値xyは同じオブジェクトへの参照です。変更方法は問題ではありません。変更は表示されますが、その後オブジェクトにアクセスします。

または、例としてリストを使用する場合:

List<String> list1 = new ArrayList<String>();
List<String> list2 = list1;
list1.add("help");
System.out.println(list2.size()); // Prints 1

これは、Java を理解する上で非常に重要です。すべてのクラスが同じように機能します。式の値は決してオブジェクトではありません。常に参照またはプリミティブ値のいずれかです。

于 2012-10-31T07:00:47.033 に答える
0

L1 と l.getLast() はどちらも同じオブジェクト (親リンク リストの最後) を参照します。

L1.addLast("something") または l.getlast().addlast("something") を使用すると、最後のリストの最後に「something」が追加されます。

于 2012-10-31T07:03:17.190 に答える