01
字符串拼接操作
常量与常量的拼接结果在常量池,原理是编译期优化
常量池中不会存在相同内容的常量
拼接字符串时只要有其中一个是变量,拼接结果就在堆中。变量拼接的原理是StringBuilder
如果拼接的结果调用 intern() 方法,则主动将常量池中还没有的字符串对象放入池中,并返回此对象的地址。
02
字符串拼接操作面试题
常量与常量的拼接结果在常量池,原理是编译期优化
代码
public static void main(String[] args){
String str1 = "a" + "b" + "c"; String str2 = "abc"; // 一定是放在字符串常量池中 /** * 最终 .java 编译成 .class ,再执行 .class * String str1 = "abc"; * String str2 = "abc"; * */ System.out.println(str1 == str2); // true System.out.println(str1.equals(str2)); // true}
编译后的代码反编译结果及指令代码如图
拼接字符串时只要有其中一个是变量,则相当于在堆空间中new String(),拼接结果就在堆中。变量拼接的原理是S