public class Demo {
public static void main(String[] args) {
String s1 = "Hello";
String s2 = "Hello";
System.out.println("s1 == s2 " + (s1 == s2));
String s5 = "Hel" + "lo";
String s6 = "He" + "llo";
System.out.println("s5 == s6 " + (s5 == s6));
String s7 = "He";
String s8 = "Hello";
s7 = s7.concat("llo");
System.out.println("s7 == s8 " + (s7 == s8));
String s10 = "He";
s10 = s10 + "llo";
System.out.println("s1 == s10 "+(s1 == s10));
}
}
上記のコードでは、s7 == s8 および s1 == s10 は false を返します。誰かが私に説明してくれませんか、ここで実際に何が起こっているのか s7 = s7.concat ("llo"); そして s10 = s10 + "llo"; == 演算子は参照をチェックし、 equal() はオブジェクトの内容をチェックすることを理解しています。しかし、s7 と s10 の参照変数のビット パターンが s8 と s1 と異なる理由を知る必要があります。これらがコンパイル時に生成された文字列と実行時に生成された文字列に関連している場合、それがコンパイル時または実行時の文字列であるかどうかをどのように識別できますか?