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类型 堆/字符串池的理解
猜你喜欢
转载自blog.csdn.net/mweibiao/article/details/80557102
今日推荐
周排行