String vs StringBuilder

当我们实例化一个String的对象后,在内存中为此对象分配一个空间。如下:
       String strtest = “aa”;
当我们修改strtest的值的时候,如:strtest = “bb”;此时,系统会为strtest重新分配一个空间。这样原来的内存空间就被浪费掉了,只能等待垃圾回收器回收。在我平时的工作中发现一些代码中频繁的修改String对象的值,如:
String strSQL = “Select ....”;
strSql += “...”;
strSql += “...”;
strSql += “...”;
...
实际上这样是十分浪费内存空间的。如果是频繁的这样做的话,建议是使用StringBuilder对象,但是如果频繁累加字符串的次数不是很多的时候实际上用StringBuilder会适得其反,我觉得种情况可以这样写:
String strSQL = “Select ....” + “...” + “...” + “...” + ...;
这样相对性能会好一些。
这次李建忠老师讲解了一下copy-to-write技术。对于两个String类型的变量来说,如下
String str1 = “aa”;
String str2 = “aa”;
当这两个String类型变量的值相同时,实际上他们指向的是同一个内存空间,如下图:

   对于StringBuilder对象来说是这样的,如:有两个StringBuilder对象
       StringBuilder sb1 = new StringBuilder(“aa”)
       StringBuilder sb2 = new StringBuilder(“aa”)
他们在内存中的状态如下图:
   
当sb2变化时,只是修改sb2中指向的位置。如下图
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值