1

私はいくつかのライブラリコードで大きな問題を抱えていました.1つのステートメントに突き止めました:

System.out.println((String) null);

コードは実際にはそのようには見えませんがprintln、null 引数で呼び出していることは確かです。これを行うと、アプリケーション全体が予期しないをスローしNullPointerExceptionます。

一般に、その状況下でこの例外をスローする必要がありますか、それともインスタンスprintlnの実装が不十分なため、この非標準の動作ですか?out

4

5 に答える 5

3

sun の JVM は単に「null」を出力します。これは、引数PrintStream.print(String)が与えられたときの指定された動作ですnull

于 2010-05-22T11:35:03.570 に答える
2

OK、私のプラットフォームの の実装でエラーが見つかりましたPrintStream.print。開発者と一緒にフォローアップすると思います。

public void print(String s) {
    // WHERE IS THE NULL CHECK??!
    for(int i=0;i<s.length();i++) {
        write(s.charAt(i));
    }
}

これが実際に非標準の動作であることを確認していただきありがとうございます。

于 2010-05-22T11:40:38.317 に答える
1

上記は例外をスローするべきではありません。あなたは次のようなものを持っていませんか?

System.out.println(a.b);

はどこaですかnull

または、おそらくnull に設定されていますか ( /ストリームSystem.outを設定できることに気付いている人は多くありません)。outerr

于 2010-05-22T11:36:28.480 に答える
0

標準のデスクトップ Java (Mac OS X の Java SE 6 update 20) でその行を試してみると、 がスローされず、 がNullPointerException出力されるだけnullです。

NullPointerExceptionこの場合、 a をスローするのはバグだと思います。

于 2010-05-22T11:36:49.963 に答える
0

これをsunのjdk 6で実行してみましたが、うまくいきました。期待どおり null を出力しました。

于 2010-05-22T11:36:55.810 に答える