package test;public class StringTest { public static void main(String[] args) { String s = "a"; s += s + "b"; } } 能否有大佬告知该执行过程中在堆内存中共创建了几个对象? 最好把过程详细告知.谢谢各位大佬
最后一句表述是不对,应该是String池。String池在1.7以前是放在方法区。虚拟机计算字符串相加,每计算一次会产生一个字符串对象的。新的对象会放在String池里,既使没有变量的引用,这个对象依然存在。 题主问的是堆中创建了几个对象,堆中没有创建对象。如果你用s = new String("a"),虚拟机会在堆中创建一个对象,在String池中创建一个对象
s += s + "b";创建字符串常量池对象“aab” 并把s指向这个新的对象
所以总共创建了字符串常量池中的两个对象 如果用new String还会在堆中再创建一个对象
题主问的是堆中创建了几个对象,堆中没有创建对象。如果你用s = new String("a"),虚拟机会在堆中创建一个对象,在String池中创建一个对象