package test;
public class StringTest {
public static void main(String[] args) {
/**
* 创建过程:
* 1.检查StringPool(字符串池)里是否有"aaa"对象,这里没有,创建StringPool的字符串对象"aaa"
* 2.在jvm堆里创建字符串对象"aaa"
* 所以,这里创建了2个对象
*/
String s = new String("aaa");
/**
* 创建过程:
* 1.检查StringPool(字符串池)里是否有"aaa"对象,因为上面已经创建过,所以这里不再创建
* 所以,这里并没有创建对象
*/
String s2 = "aaa";
/**
* 创建过程:
* 1.检查StringPool(字符串池)里是否有"aaa"对象,因为上面已经创建过,所以这里不再创建
* 2.在jvm堆里创建字符串对象"aaa"
* 所以,这里创建了1个对象
*/
String s3 = new String("aaa");
/**
* intern方法的作用:返回调用对象的字符串池里的字符串对象的引用
*/
String s4 = s.intern();
String hello = "hello";
String hel = "hel";
String lo = "lo";
/**
* 打印true
* 如果右边计算不涉及变量计算,全部都是常量,不会产生新的对象
* 所以返回的是字符串池里的对象引用
*/
System.out.println(hello == "hel" + "lo");
/**
* 打印false
* 右边计算涉及变量计算,有对象操作,会产生一个新的对象
* 所以返回的是堆的对象引用
*/
System.out.println(hello == "hel" + lo);
}
}
String类型 堆/字符串池的理解
最新推荐文章于 2022-08-03 17:30:31 发布