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
比較を呼び出すときに出力されるため、2 つの変数は同じオブジェクトを参照しています。final
変数は再定義できないと言いましたが、この場合、その言葉static
はまったく役に立ちません。私は要点を逃していますか?
さらにいくつかのこと:
1 - コンストラクターを明示的に呼び出してString
も文字列がプールされないのはなぜですか? new String("hello")
printを使用した上記の同じコードfalse
。
2 - プーリング動作は文字列に予約されていますか? 他にもいくつかの不変オブジェクト (BigInteger など) がありますが、これらはプールされていないと思います...なぜですか?
ありがとう、カルロ