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

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

DDD
リリース: 2024-11-19 10:10:03
オリジナル
994 人が閲覧しました

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

Java での Null 文字列の連結

Java では、Null 文字列の連結は直観に反して、NullPointerException が発生する可能性があります。ただし、この操作は正常に実行され、その結果、「null」を含む文字列とその後に連結された文字列が生成されます。

なぜこれが機能するのですか?

Java 言語仕様によると(JLS) 8、§ 15.18.1 では、null 参照は文字列連結中に明示的に文字列「null」に変換されます。この変換はメソッド呼び出しの前に行われ、NullPointerException がスローされないようにします。

仕組みは何ですか?

Java コンパイラーは、連結式を等価なシーケンスに変換します。メソッド呼び出し。 s = s "hello" の場合、コンパイラは次のようなコードを生成します。

s = new StringBuilder(String.valueOf(s)).append("hello").toString();
ログイン後にコピー

StringBuilder の append メソッドは、null 引数を適切に処理します。 null が最初の引数の場合、String.valueOf() が呼び出されて文字列に変換されます。

あるいは、式 s = "hello" s は次のように変換されます。

s = new StringBuilder("hello").append(s).toString();
ログイン後にコピー

この場合、append メソッドは 2 番目の引数として null を受け取り、それを次の引数に委譲します。 String.valueOf().

注:

Java コンパイラは、StringBuilder プーリングなどの手法を使用して、パフォーマンスを向上させるために文字列の連結を異なる方法で最適化する場合があります。したがって、生成される正確に同等のコードは、使用するコンパイラーによって異なる場合があります。

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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート