String是一种不可被继承和修改的java对象,一旦在内存中定义,那么他就是那个样了,不能变动了。而StringBuffered是一种对String类的包装。他在创建的时候有一个缓冲区。当我们准备去改变StringBuffered的内容时,实际上我们就开启了他的缓冲功能,在缓冲区中有一千的字符串,我们把新的字符串用append方法添加进去的时候我们是添加进了缓冲区,并没有真正添加进对内存。如果我们要使用它必须将它放进内存,所以很多时候我们会将StringBuffered转换成String类型的在放进内存。而String的"+"虽然也是添加字符串。但是在真正添加之前。虚拟机会将String类转换成StringBuffered类型,再利用他的缓冲功能将字符串添加进去。最后我们要向使用这个新的字符串,同样必须先将它放进对内存。这个时候虚拟机就会为新的字符串分配新的地址空间,而以前的字符串一般就被放弃不使用了。而如果要想再次改变该字符串就得再次将String类型变成StringBuffered类型。这样一来一往的就会降低系统性能。所以如果我们的字符串经常被改变,为了提高性能就应该使用StringBuffered了i。等最后确定了内容再一次性的使用toString方法转变成String类型。 |