2

私のコードは次のとおりです。

public class BoxingUnboxingExample {
    public static void main(String[] args) {
        Integer i1 = null;
        Integer i3 = 10;
        BoxingUnboxingExample b = new BoxingUnboxingExample();
        b.go(i3);
        b.go(i1);
    }
    private void go(int a){
        System.out.println("a");
    }
}

今私の質問は:

ときどき、次のエラー メッセージが表示されます。

Exception in thread "main" java.lang.NullPointerException
at scjp.wraperExample.BoxingUnboxingExample.main(BoxingUnboxingExample.java:12)
a

一方、常に次のようにする必要があると思いますが、

a
Exception in thread "main" java.lang.NullPointerException
at scjp.wraperExample.BoxingUnboxingExample.main(BoxingUnboxingExample.java:12)

私は正しいですか?

4

5 に答える 5

2

1 つの理由として、例外スタック トレースが使用中standard error (System.err)にエラー データを出力することが考えられます。System.out.printlnstandard output (System.out)

つまり、両方が異なるメカニズムを使用してデータを出力しているため、これらは適切に同期されていない可能性があります。

この以前の質問も参照できます。

于 2013-01-16T06:14:27.047 に答える
1

出力とエラーは2つの異なるストリームSystem.errSystem.outです。

これを読む:

標準出力と標準エラーがテキスト端末などの同じ宛先に送信されることは許容され、通常のことです。バッファリングが含まれない限り、メッセージはプログラムがメッセージを書き込むのと同じ順序で表示されます。(たとえば、一般的な状況は、標準エラーストリームがバッファリングされていないが、標準出力ストリームがラインバッファリングされている場合です。この場合、標準出力ストリームのバッファがない場合、後で標準エラーに書き込まれたテキストが端末に表示されることがあります。まだいっぱいです。)

wikipedaから

したがって、出力ストリーム(System.out.println)は実際にバッファリングされます。内部的にはmethodeをBufferedWriter.write()呼び出します。これを見てください: System.out.println()が実際にどのように機能するか

于 2013-01-16T06:08:30.423 に答える
1

ここには少なくとも 2 つの効果があり、どちらも方法System.outに関連しておりSystem.err、(当然のことながら) 2 つの異なるストリームです。

バッファリング

System.errSystem.outはどちらも PrintStream であり、デフォルトでバッファリングされますSystem.errが、通常は (バイト配列の、または改行が書き込まれるたびに) 書き込みのたびに自動フラッシュに設定されます。

そのため、System.errがフラッシュされる前にSystem.outがフラッシュされると、最初に画面に表示されます。

それらのストリームの読み取り

System.outエディターでは、との両方System.errが 1 つのコンソール内に表示されることは珍しくありません。これが起こる方法は、それらが表示される順序に影響します。Eclipse には、ストリームから読み取って表示するための、ストリームごとに 1 つずつ、2 つのプロセスがあります。それらが読み取られる (したがって、表示される) 順序は非決定論的です。両方のストリームがほぼ同時に書き込まれた場合、読み取り元のプロセスがSystem.err最初に入力を受け取る可能性は 50% になります。そのため、ランダムにインターリーブされているように見える場合があります。

于 2013-01-16T06:13:15.810 に答える
1

Eclipse を使用している場合、これは既知の問題です。https://bugs.eclipse.org/bugs/show_bug.cgi?id=32205を参照してください。

于 2013-01-16T06:17:15.607 に答える