Java で Null 文字列が連結される理由
Java では、NullPointerException が発生することなく Null 文字列を連結できます。この現象は、Java 仮想マシン (JVM) が null 参照を処理する方法が原因で発生します。
null 参照の処理
Java 言語仕様 (JLS) によれば、参照が null の場合、文字列連結の実行時に文字列 "null" に変換されます。この変換は JVM によって自動的に実行されます。その結果、式 s "hello" は例外を発生させず、s が最初に null であっても、代わりに文字列 "nullhello" として評価されます。
実装の詳細
JVM は、StringBuilder クラスを使用するバイトコードを生成することで、連結中に null 参照を処理します。コンパイラは、連結操作を StringBuilder オブジェクトを初期化するコードに効果的に変換し、null 以外の文字列 (この場合は「hello」) を追加し、結果を String オブジェクトに変換します。
以下のコードは、コンパイラが生成する同等のバイトコード:
String s = null; s = new StringBuilder(String.valueOf(s)).append("hello").toString();
このコードは StringBuilder クラスを使用して null 参照を安全に処理し、
最適化に関する考慮事項
パフォーマンス上の理由から、JVM は StringBuffer クラスまたは同様の手法を使用して、繰り返される文字列の連結を最適化できます。この最適化により、評価中に不要な中間 String オブジェクトが作成されることが回避されます。ただし、この最適化の正確な実装はコンパイラによって異なる場合があります。
以上がNull 文字列を連結するときに Java が NullPointerException をスローしないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。