0

修正できない奇妙なバグがあります。誰でも私を助けることができますか?ありがとうございました。

ArrayList<Choices> newSecurityChoicesList =
    securityChoicesController.getChoicesList();
System.out.println("first-" + newSecurityChoicesList.size());
securityQuestion.getChoices().clear();
System.out.println("second-" + newSecurityChoicesList.size());

いくつかの説明:

私はこれを作成しましたnewSecurityChoicesList ArrayList。メソッド内のローカル変数です。最初のシステムの出力では、2 という結果が得られます。

2 回目の出力で結果が 0 になるのはなぜですか?

もちろん、それはsecurityQuestion.getChoices().clear();方法によるものです。しかし、なぜメソッドはメソッド内のローカル変数を変更できるのでしょうか? このメソッドは、アプリケーションの最後に一度だけ呼び出されます。

前もって感謝します。

4

2 に答える 2

7

参照変数を扱っており、それが参照するオブジェクトのプロパティを変更しています。したがって、メソッドのローカル変数はローカルですが、メソッドに渡されたオブジェクトを参照します。繰り返しますが、これは Java のバグではなく、参照変数に関する理解の問題です。

メソッドに渡された ArrayList の状態を変更したくない場合は、それを操作する前に、メソッドでその詳細コピーを作成します。つまり、新しい ArrayList を作成してから、パラメータ ArrayList を反復処理し、元のリストの各項目のコピーを作成してから新しいリストに追加する必要があります。

于 2012-05-11T01:44:17.417 に答える
1

は参照によって保持されているため、 2 つの参照 (1 つはローカル変数として、もう 1 つはオブジェクトArrayList<Choice>内) を介して同じオブジェクトを変更しているためです。securityQuestion

于 2012-05-11T01:44:39.347 に答える