ホームページ >Java >&#&チュートリアル >Java で Null 文字列を連結すると NullPointerException がスローされないのはなぜですか?

Java で Null 文字列を連結すると NullPointerException がスローされないのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-02 18:39:11783ブラウズ

Why Doesn't Concatenating a Null String in Java Throw a NullPointerException?

Java での Null 文字列の連結

Java では、Null 文字列を別の文字列と連結しても、NullPointerException はスローされません。期待する。代わりに、結果は先頭に「null」が付加された新しい文字列になります。

なぜこれが期待される動作ですか?

Java 言語仕様 (JLS) による):

"[null 文字列への] 参照の場合null の場合、文字列 'null' (4 つの ASCII 文字 n、u、l、l) に変換されます。"

したがって、null 文字列は、前に自動的に "null" に変換されます。連結が行われます。

この動作はどうですか実装されていますか?

コンパイラは、パフォーマンスを向上させるために文字列の連結を最適化します。これは、StringBuilder オブジェクトを使用して連結結果を蓄積することによって行われます。

null 文字列が見つかった場合:

  • null 文字列が最初の引数の場合、String.valueOf( ) を使用して、null 以外の文字列 (「null」) に変換します。
  • null 文字列が最初の引数ではない場合、 Null 文字列を StringBuilder に追加し、その結果に対して String.valueOf() を呼び出します。

次のコードを考えてみましょう:

String s = null;
s = s + "hello";
System.out.println(s); // prints "nullhello"

コンパイラはこのコードを次のように最適化します。同等:

s = new StringBuilder(String.valueOf(s)).append("hello").toString();

s が null であるため、String.valueOf(s) は「null」を返し、これが StringBuilder に追加されて文字列に変換されます。

以上がJava で Null 文字列を連結すると NullPointerException がスローされないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。