制作String as final
或者我们可以制作String as final
有什么好处吗?我的理解是,因为字符串是不可变的,所以没有必要使它成为最终的,这是正确的还是它们的情况人们想要制作String as Final
?
代码:
private final String a = "test";
or
private String b = "test";
答案 0 :(得分:10)
final
表示引用永远不会改变。 String
不变性意味着不同的东西;它意味着当创建String
(值,而不是引用,即:“text”)时,它不能被更改。
例如:
String x = "Strings Are ";
String s = x;
现在s和x都引用相同的String
。但是:
x += " Immutable Objects!";
System.out.println("x = " + x);
System.out.println("s = " + s);
这将打印:
x = Strings Are Immutable Objects
s = Strings Are
这证明创建的任何String
都无法更改,并且当发生任何更改时,会创建新的String
。
现在,对于final
,如果我们将x声明为final
并尝试更改其值,我们将获得例外:
final String x = "Strings Are ";
x += " Immutable Objects!";
以下是例外:
java.lang.RuntimeException: Uncompilable source code - cannot assign a value to final variable x
答案 1 :(得分:4)
这意味着变量甚至不能指向不同的字符串。
(是的,一个String对象是不可变的......但是一个变量可以指向一个不同的String实例。除非它是最终的。)
(编辑 - 在你的例子中,你没有命名你的变量......
final String x = "test";
)
答案 2 :(得分:4)
final表示引用不能更改,而不是值。无论决赛如何,弦乐总是不变的。
final String a = "test";
String b = "hello";
a = "world"; // error, a can't change reference to the String object "world"
b = "two"; // ok, b points to a different String object "two"
答案 3 :(得分:1)
final
平均变量无法更改。
final String s = "abcd";
// later in the code
s = "efgh"; // This will not compile
不可变意味着String
上有方法可以更改其中的内容,例如setter
,append
等
答案 4 :(得分:0)
这里一切都很好,但是有两种方法可以解决“处理Final Strings ”的问题,正如你所说的那样,但就“放置它们的位置”而言:
方式1,在大约10年前很流行,可能仍然是你有大量最终变量的地方。 方式2,使用简单但有点奇怪,因为你可以在没有资格的情况下引用常量,这使你的代码难以理解。
答案 5 :(得分:0)
拥有final字段的一个区别是,因为String是不可变的,所以它也可能是静态的。
private final String a = "test";
稍微高效,可能更清晰
private static final String a = "test";