ホームページ > Java > &#&チュートリアル > 文字列を「final」として宣言すると、Java の `==` 比較にどのような影響がありますか?

文字列を「final」として宣言すると、Java の `==` 比較にどのような影響がありますか?

Susan Sarandon
リリース: 2024-11-29 07:49:09
オリジナル
371 人が閲覧しました

How Does Declaring Strings as `final` Affect `==` Comparison in Java?

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

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