为何String类和StringBuffer测试耗费内存相同呢

为什么String类和StringBuffer测试耗费内存相同呢?
class MemoryTest2
{
public static void main(String[] args) 
{
StringBuffer s2=new StringBuffer("abcddafdfadsfad");
System.out.println("当前虚拟机最大可用内存:");
System.out.println(Runtime.getRuntime().maxMemory()/1024/1024+"M");
System.out.println("循环前内存:");
System.out.println(Runtime.getRuntime().maxMemory()/1024/1024+"M");
int count=0;
while(true)
{
try
{
s2.append(s2);
count++;
}catch(Error o){
System.out.println("循环次数:"+count);
System.out.println("字节数:"+s2.length()/1024/1024+"M");
System.out.println("循环后内存:");
System.out.println(Runtime.getRuntime().maxMemory()/1024/1024+"M");
System.out.println("Catch到的错误:"+o);
break;
}

}
}
}

String类修改下代码和这个一样的?为什么呢?
------解决方案--------------------
1.maxMemory获取的是虚拟机最大可用内存,并不是当前已经使用的内存
2.StringBuffer相比String不会耗费更少的内存,反而可能会更多,因为StringBuffer类更复杂,而且由于是Buffer,char数组长度可能大于实际内容,StringBuffer的优势是进行多次字符串合并时的效率优势。

顺便说下你又不需要线程安全,用什么StringBuffer,用StringBuilder的话效率会更高
------解决方案--------------------
你可以把StringBuilder也加进去;
再说了,一个字符串能说明什么呢
------解决方案--------------------
你做10000次字符串拼接就知道了。不可变序列的string就会有10000个对象。效果很明显
------解决方案--------------------
楼上说的对的。要大数据量的测试才会发现区别。

另外现在jvm自己也会做一定的优化