-4

メソッドNullPointerException内では null になっているため、次のプログラムの出力にはaが含まれていると思います。しかし、それは正常に動作し、200 を出力します。なぜですか?goc2

class CardBoard {
    Short story = 200;
    CardBoard go(CardBoard cb) {
        cb = null;
        return cb;
    }
    public static void main(String[] args) {
        CardBoard c1 = new CardBoard();
        CardBoard c2 = new CardBoard();
        CardBoard c3 = c1.go(c2);
        System.out.print(c2.story); // dout here
    }
}
4

7 に答える 7

1

Javaは値渡しですか? .

r2が への参照であるとしましょう。 がその参照の値であるとしc2ましょう。つまり、場所に他123なりません。r2123c2's

を呼び出すとc1.go(c2)、 を保持する新しい参照rNが作成さ123れ、メソッドに渡されます。そしてやるとならないc2 = nullリフレンスです。rNnullc2

于 2013-07-27T05:15:24.950 に答える
0

期待される結果を得るには、

`System.out.print(cb.story);`

cbgoの後のメソッド内。nulling

または

System.out.print(c3.story); // dout here

あなたの場合、にnull割り当てられているものを返していますc3。したがって、c2変数を変更していません。

これらの疑問について私が見つけた最良の説明はここにあります

すべての回答とコメントは読む価値があります。

于 2013-07-27T05:15:32.380 に答える
0
  • c2 への参照が go メソッドに渡されます。
  • 参照はパラメーター cb に割り当てられます
  • メソッド コードは、パラメータ変数に null を割り当てます。

これはすべて、 go メソッドの外側の c2 変数の内容には影響しません

于 2013-07-27T05:10:11.727 に答える