com*_*der 4 java string heap concatenation string-concatenation
说我有这个String表达
String hi = "Tom" + "Brady" + "Goat"
Run Code Online (Sandbox Code Playgroud)
我知道字符串池"允许运行时通过在池中保留不可变字符串来节省内存" 字符串池
字符串池中将创建多少个字符串?
我最初的猜测是5 - ,"Tom","Brady","Goat","TomBrady","TomBradyGoat"因为操作顺序的String级联(左到右?),或者是它只是最后的结果,"TomBradyGoat",存储在字符串池?
你在这里得到的是一个常量表达式,如JLS第15.28节所定义.
常量表达式是表示基本类型值的表达式或不突然完成的字符串,仅使用以下内容组成:
原始类型的文字和String类型的文字(§3.10.1,§3.10.2,§3.10.3,§3.10.4,§3.10.5)
转换为基本类型并转换为String类型(第15.16节)
一元运算符+, - ,〜,和!(但不是++或 - )(§15.15.3,§15.15.4,§15.15.5,§15.15.6)
乘法运算符*,/和%(§15.17)
加法运算符+和 - (§15.18)
(其他可能性)
编译器确定表达式"Tom" + "Brady" + "Goat"是常量表达式,因此它将计算表达式本身"TomBradyGoat".
JVM在字符串池中只有一个字符串"TomBradyGoat".