に新しいオブジェクトを作成しました。以下はコードです。実行したときに、新しく作成された文字列オブジェクトがStringプールにないことを推測できました。上記のコードリターン偽の文字列に対してString.toUpperCase()は、ヒープまたは文字列プール
public class Question {
public static void main(String[] args) {
String s1="abc";
System.out.println(s1.toUpperCase()==s1.toUpperCase());
}
}
出力。 私は "=="とequals()の違いについて知っていますが、この質問では2つの作成された文字列が同じでない理由が不思議です。唯一の説明は、それらがStringプールで作成されず、2つの異なるオブジェクトであることです。
[Javaの文字列を比較するにはどうすればいいですか](https://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) – nullpointer
文字列リテラルを作成すると、 Stringプールに移動します。それ以外の場合は、新しいオブジェクトが作成されます。 – Pramod
'=='は2つの文字列を比較していないので、2つのオブジェクトが2つの文字列を比較しているので、2つのオブジェクトが違います。 Stringオブジェクトは不変なので、Stringプールに移動すると思います。 '不変vs可変オブジェクト '、'文字列プール対ヒープ ' –