求大神帮忙分析一下这段代码内存是如何分配的?
问题描述:
String s1="hello";
String s2=s1.substring(2,3);
String s3 =new StringBuffer(s1).toString();
答
string的内部使用char数组来维护的;
1.s1="hello";
系统开辟内存放置hello,并将其刷入字符串池;
2.s2=s1.substring(2,3);
内部是new了一个新对象;
相当于
s2 = new String("l");
所以会分配堆内存,并且不会刷入字符串池;
s3 = new ..
堆内存为StringBuffer分配空间放置hello;
toString是new了一个String对象,所以会新分配一个地址,并且不会刷入字符串池。
如果有帮助,希望采纳