Java の文字列比較における Final の影響を理解する
Java では、文字列の等価性は通常、equals() メソッドを使用して判断されます。 。ただし、== 演算子も比較に使用できますが、最終文字列を処理する場合はその動作が異なります。
文字列変数が Final として宣言され、コンパイル時の定数式で初期化されると、定数になります。変数とその値はコンパイラによってインライン化されます。このインライン化により、== を使用した比較に大きな違いが生じます。
次のコード例を考えてみましょう:
String str1="str"; String str2="ing"; String concat=str1+str2; System.out.println(concat=="string"); // false
concat は作成された新しい String オブジェクトであるため、この例の比較では false が返されます。実行時に str1 と str2 を連結して実行します。
次に、str1 と str2 を宣言してコードを変更しましょう。 str2 as Final:
final String str1="str"; final String str2="ing"; String concat=str1+str2; System.out.println(concat=="string"); // true
この場合、比較は true を返します。これは、str1 と str2 がfinal として宣言されると定数変数になり、コンパイル時にインライン化されるためです。 2 つの文字列の連結もコンパイル時に計算され、値「string」を持つ定数 String オブジェクトが生成されます。
文字列リテラルが Java にインターンされているため、違いが生じます。インターンには、将来の参照のために String オブジェクトの一意のインスタンスをプールに保存することが含まれます。最終 String がコンパイル時にインライン化され、文字列リテラルと比較されると、インターン プール内の String オブジェクトへの参照が直接比較され、結果は true になります。
要約すると、次のように宣言された最終文字列を処理する場合です。コンパイル時の定数式では、コンパイル時に String オブジェクトがインターンされるため、連結された値が他の文字列リテラルと等しい場合、== を使用した比較は true を返します。
以上が文字列を「final」として宣言すると、Java の `==` 比較にどのような影響がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。