2012-04-19 7 views
31

可能性の重複:http://docs.oracle.com/javase/6/docs/api/java/lang/String.htmlから
String and Final最終的なStringをJavaで定義するのは意味がありますか?

私はそれを読むことができます:

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

これは中final Stringは本当に、Javaで意味がないことを意味していますfinalの属性が何らかの形で冗長であると感じますか?

+0

*変数* finalを宣言することは、割り当てたObjectとは関係ありません。 –

+0

'Object'自体は不変ですが、その参照は変更可能かもしれません。それを「最終的」にすることで、参照も不変になります。 –

+0

すべての回答とコメントありがとう。重複して申し訳ありません。 – Campa

答えて

46

Stringオブジェクトは不変であるが、何それは、実際に変更することができStringオブジェクトへの参照です。

例えば

final String someString = "Lala"; 
:これで、しかし

someString = "asdf"; 

:この変数が保持する値を(それが異なる文字列を参照するために)再割り当てすることができ

String someString = "Lala"; 

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

17

finalは変数でありオブジェクトではないので、意味があります。

final String s = "s"; 
s = "a"; // illegal 
5

意味があります。 finalキーワードは、将来の変数の代入を防止します。次はJavaのエラーです:

3

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

関連する問題