5

次のコードを実行しました

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

出力はnullでした。

NullPointerException最初は、オブジェクトを出力すると暗黙的にtoStringメソッドが呼び出されるため、がスローされると思いました。だから、私はその出力に驚いた。

次に、出力について考え、上記のStringステートメントは実際にはオブジェクトを作成せず、オブジェクトを指さない参照のみが作成されると考えました。それがそのような出力の理由かもしれません。

私の理解が正しいかどうか誰かに教えてもらえますか?

4

5 に答える 5

8

print()メソッドは明示的にをチェックnullます。

public void print(String s) {
    if (s == null) {
        s = "null";
    }
    write(s);
}
于 2012-10-29T18:24:12.597 に答える
3

PrintStream.printそれがそうであるかどうかをチェックしますnull

 public void print(String s) {
   if (s == null) {
    s = "null";
   }
   write(s);
 }

JavadocからPrintStream.printそれがそうであるかどうかをチェックしますnull

文字列を出力します。引数がnullの場合、文字列「null」が出力されます。それ以外の場合、文字列の文字はプラットフォームのデフォルトの文字エンコードに従ってバイトに変換され、これらのバイトはwrite(int)メソッドとまったく同じ方法で書き込まれます。

于 2012-10-29T18:24:52.417 に答える
2

NullPointerExceptionを指す参照を使用してnullメソッドを呼び出すか、値にアクセスする場合にのみ発生します。値を出力するだけでは、は発生nullしませんNullPointerException

したがって、以下のコードでは、次のようになりますNPE:-

String str = null;
System.out.println(str.length());

メソッドのソースコードを見ると、PrintStream#print以下のようになっています。

public void print(String s) {
    if (s == null) {
        s = "null";
    }
    write(s);
}

nullしたがって、値をチェックし、それ"null"に応じて出力します。

于 2012-10-29T18:25:23.550 に答える
2

Print()デフォルトでチェックしnullますが、

System.out.print(str.toString());

今、あなたは得るだろうNullPointerException

于 2012-10-29T18:25:52.537 に答える
1

参照を使用してオブジェクトを印刷してnullも、問題は発生しません。参照(または、必要に応じてポインター)で操作を呼び出すnullと、NPEが得られます。やってみてください

System.out.println (str.toString())

そしてそれはあなたに素晴らしいNPEを与えるはずです

于 2012-10-29T18:25:27.990 に答える