1
Stack<Animal> myStack = new Stack<Animal>();
Animal a = new Animal();
a.setValueOfAnimal(5);
myStack.push(a);
a.setValueOfAnimal(15);
System.out.println(myStack.pop().getValueOfAnimal());

上にサンプルのメインメソッドがあります。

出力は15になります。

スタック内のオブジェクトを安全にする方法はありますか?「Animala」の値を変更するときに、スタック内のオブジェクトを変更したくありません。

これは、組み込みのJavaクラスでサポートされていますか?

4

4 に答える 4

6

「Animala」の値を変更するときに、スタック内のオブジェクトを変更したくありません。

次に、の新しいインスタンスを作成する必要がありますAnimal

Animalに参照を追加するStackと、同じを指す参照のコピーが保存されますAnimal。したがって、Animal元の参照を使用してインスタンスを変更すると、の参照用にも変更されStackます。

したがって、次のようにコードを変更する必要があります。-

myStack.push(a);
a = new Animal(); // Make the reference `a` point to a new instance.
a.setValueOfAnimal(15);
于 2012-11-29T19:40:54.717 に答える
3

a = new Animal()の後に追加しない限り、できませんmyStack.push(a);

また、コピーコンストラクターを提供することもできます。

public Animal(Animal someAnimal) {
    this.value = someAnimal.value;
}

次に、次のように書くことができます。

myStack.push(new Animal(a)); //put a copy in the stack
于 2012-11-29T19:39:51.933 に答える
2

プッシュ後に参照をヌルにすると、スタック上のオブジェクトが安全になります。

Animal a = new Animal();
a.setValueOfAnimal(5);
myStack.push(a);
a = null;  // remark here.
于 2012-11-29T19:41:54.843 に答える
0
于 2020-12-20T04:32:31.630 に答える