web-dev-qa-db-ja.com

Javaで最終的な文字列を定義するのは理にかなっていますか?

可能性のある複製:
ストリングおよびファイナル

http://docs.Oracle.com/javase/6/docs/api/Java/lang/String.html 私はそれを読むことができます:

Strings are constant; their values cannot be changed after they are created. 

これは、final Stringは、Javaでfinal属性が何らかの形で冗長であるという意味で、実際には意味がありませんか?

41
Campa

Stringオブジェクトは不変ですが、実際には、変更可能なStringオブジェクトへの参照です。

例えば:

String someString = "Lala";

この変数が保持する値を再割り当てできます(別の文字列を参照させるため)。

someString = "asdf";

ただし、これでは:

final String someString = "Lala";

その場合、上記の再割り当ては不可能になり、コンパイル時エラーが発生します。

56
Mike Kwan

finalはオブジェクトではなく変数を参照するため、はい、意味があります。

例えば.

final String s = "s";
s = "a"; // illegal
19
MByD

それは理にかなっている。 finalキーワードは、変数への将来の割り当てを防ぎます。以下はJavaのエラーです。

final String x = "foo";
x = "bar" // error on this assignment
5
Colin D

参照は最終的なものですが、オブジェクトはそうではありません。変更可能なオブジェクトを最終オブジェクトとして定義し、その状態を変更できます。最後に確認することは、使用している参照が別のオブジェクトを再び指すことはできないということです。

3
Kalpak Gadre