public class test {
public static void main(String[] args) {
String s1 = "hello";// 常量池
String s2 = "world";// 常量池
String s3 = "hello"+"world";// 常量池
String s4 = s1 + s2;// 堆 创建堆对象,无论常量池中是否有helloworld都不创建常量池对象
String s5 = s1 + "world";// 堆 创建堆对象,无论常量池中是否有helloworld都不创建常量池对象
String s6 = "hello" + s2; // 堆 创建堆对象,无论常量池中是否有helloworld都不创建常量池对象
String s7 = new String("hello");// 堆 常量池中是否存在?创建堆对象:创还能堆对象和常量池对象
String s8 = new String("world");// 堆 常量池中是否存在?创建堆对象:创还能堆对象和常量池对象
String s9 = new StringBuffer("hello").toString();//堆 常量池中是否存在?创建堆对象:创还能堆对象和常量池对象
String s10 = new StringBuilder("hello").toString();//堆 常量池中是否存在?创建堆对象:创还能堆对象和常量池对象
String s11 = s7 + "world";// 堆 创建堆对象,无论常量池中是否有helloworld都不创建常量池对象
String s12 = s7 + s8;// 堆 创建堆对象,无论常量池中是否有helloworld都不创建常量池对象
String s13 = s12.intern();// 常量池中是否存在?常量池对象地址:创建常量池对象,返回创建的常量池对象地址
// 总结:只要new创建两份对象;只要相加创建一份对象,其中常量相加创建常量池对象,常量池对象和变量相加创建堆对象。
}
}
研究字符串常量池
最新推荐文章于 2024-05-31 10:46:10 发布