Java 与字符串常量池相关的查询
PFB是我试图理解的一段代码Java 与字符串常量池相关的查询,java,string,immutability,Java,String,Immutability,PFB是我试图理解的一段代码 public static void main(String[] args) { String s1 = "dexter7"; String s2 = "dexter" + "7"; System.out.println(s1==s2); //line 1 - Output is true String s3 = "dexter" + s1.length(); System.out.println(s1==s3); /
public static void main(String[] args) {
String s1 = "dexter7";
String s2 = "dexter" + "7";
System.out.println(s1==s2); //line 1 - Output is true
String s3 = "dexter" + s1.length();
System.out.println(s1==s3); //line 2 - Output is false
}
根据字符串常量池的概念,如果常量池中存在字符串值,则将重复使用它,而不是创建新字符串,除非图片中有“new”关键字
那么,考虑到上面代码段中标记的第1行和第2行的输出,为什么在上面代码段中会改变这种行为呢
谁能帮我理解这一点
谢谢。s1.length()
不是在编译时计算的,而是在运行时计算的,所以
String s3 = "dexter" + s1.length();
将被汇编成
String s3 = new StringBuilder("dexter").append(s1.length()).toString();
而toString
将在内部使用新字符串(…)
来创建s3
,因此它不会来自字符串池
另一方面
String s2 = "dexter" + "7";
由编译器连接并编译为
String s2 = "dexter7";
因此,
s2
与s1
是相同的字符串文字,因为s1.length()
不是一个常量表达式。这个问题有很多重复项。一定要搜索它们。