static final String = "something";
我想知道这样的声明在 Java 中是否具有某种真正的意义。我已经在代码中发现了数千次,但是学习和使用字符串我已经了解到,无论你声明一个对象多少次String
:如果你之前的某个类声明了这个字符串,它就会被池化并重用(我是谈论在没有显式构造函数调用的情况下创建的字符串)
public class StringCompare {
private void toCompare(String h) {
String x = "hello";
System.out.println( x == h);
}
public void compare() {
String h = "hello";
toCompare(h);
}
}
事实上,这段代码在true
调用 compare 时会打印出来,因此 2 个变量引用的是同一个对象。说final
不能重新定义一个变量,这个static
词在这种情况下完全没用。我错过了重点吗?
还有几件事:
1 - 为什么显式调用String
构造函数不会导致字符串被池化?上面使用new String("hello")
print的相同代码false
。
2 - 池行为是否保留给字符串?还有一些其他不可变对象(如 BigInteger),但我认为这些对象没有被合并……为什么?
谢谢,卡罗