52

重複の可能性:
String と Final

http://docs.oracle.com/javase/6/docs/api/java/lang/String.htmlから、次のことがわかります。

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

これは、属性が何らかの形で冗長であるという意味で、Java ではafinal Stringが実際には意味をなさないことを意味するのでしょうか?final

4

4 に答える 4

71

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

例えば:

String someString = "Lala";

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

someString = "asdf";

ただし、これで:

final String someString = "Lala";

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

于 2012-04-19T17:18:30.820 に答える
21

finalオブジェクトではなく変数を参照するので、はい、それは理にかなっています。

例えば

final String s = "s";
s = "a"; // illegal
于 2012-04-19T17:18:16.890 に答える
6

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

于 2012-04-19T17:26:11.230 に答える
6

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

final String x = "foo";
x = "bar" // error on this assignment
于 2012-04-19T17:19:32.560 に答える