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 サイトの他の関連記事を参照してください。