【发布时间】:2020-08-18 16:01:48
【问题描述】:
根据以下How Java String pool works when String concatenation? 对话,
String a = "hello world!";
String b = "hello" + " world!";
boolean compare = (a == b);
compare 应该是正确的,这是正确的。
但是,我有以下代码
String s1 = "This is";
String s2 = " a new String";
String s3 = s1 + s2;
String s4 = "This is a new String";
比较System.out.printf("s3 == s4:%s\n", s3 == s4);//always false
它总是错误的。我的理解是,在s1 和s2 的连接上,s3 将在池中创建一个字符串,当创建s4 时,它将指向同一个池位置。但这种情况并非如此。我已经用不同的JDK(包括7、8和14)进行了尝试,结果是一致的。
【问题讨论】:
-
“s3 将在池中创建一个字符串”没有。运行时评估的字符串只有在您明确请求时才会添加到池中,
intern()。
标签: java string concatenation