Java で Final として宣言された == を使用した文字列の比較
Java で等価演算子 (==) を使用して文字列を比較すると、結果は文字列がfinalとして宣言されているかどうかによって異なる場合があります。
Final Strings
文字列が Final として宣言されると、コンパイラは値をコンパイル時の定数式としてインライン化することで文字列を最適化します。これは、文字列値が実行時に動的に割り当てられるのではなく、コンパイル時に決定され、バイトコードに直接格納されることを意味します。
最終文字列の動作
Final として宣言された文字列の場合、比較式 concat == "string" は true を返します。なぜなら:
Non-Final Strings
対照的に、 -final 文字列はインライン化されず、実行時に動的に割り当てられます。連結操作では、メモリ内のリテラルの「文字列」とは異なる新しい String オブジェクトが作成されます。その結果、比較式 concat == "string" は false を返します。
検証
この動作を確認するには、非最終バイトコードと最終バイトコードを比較できます。文字列バージョン:
非最終版バージョン:
// stores str and ing in separate variables and uses StringBuilder for concatenation
最終バージョン:
// directly inlines the final variable to create String string at compile time
したがって、文字列を Final として宣言し、コンパイル時の定数式で初期化すると、文字列リテラルのインライン化とインターン化による == を使用した等価比較の結果。
以上がJava で文字列を「final」として宣言すると、「==」比較に影響しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。