String&StringBuffer的区别

String对象一旦生成就不能修改,StringBuffer可以

String对象传递的时候是值传递(具体是因为String是拷贝构造,具体为什么就不要难为我了,总之现实如此),StringBuffer是引用传递

 

String是定长的,

StringBuffer是变长的

 

String是常量;它的值在创建之后不能改变。

StringBuffer支持可变的字符串。

 

在对Stirng += + 操作时并不是把你要加的字符串加到了你的对象上,而是使用你要得到的(加好的)字符串重新创建了一个Stirng对象,并把引用重新指向给你

StringBuffer可以直接对对象进行追加字符串不用重新创建对象

 

所以你要重建的对象如果要经常改变内容使用StringBuffer会更好

 

 

String是一种强不变类型,它的值一旦被赋予之后,在内存中的相应位置上的值就不会变化了.即便你用String的方法:concat(String str)replace(char oldChar, char newChar)等等,所返回的值都是新创建的一个String类型,而不是在原内存地址上去更改,因此比如这样的一个赋值:

String s="Hello Baidu";

s=new String("Hello Baidu");

 

这样在内存中其实是开辟了两个内存空间来存放Hello Baidu,前面那个对象依然留在内存当中,:

s=s.concat("!");

加上这样一句,s的值变为了Hello Baidu!,在内存中实际上是新创建了一个String对象装Hello Baidu!,而原有的Hello Baidu依然存在

 

StringBuffer就不同了,它是种可变类型,它的值被赋予之后,在运行期同样可以通过它的方法,append(String str) 操作内存上的值,而不仅仅是它的引用而已,也就是说同样的对s的值进行修改

StringBuffer s="Hello Baidu";

s.append("!");

这样的操作其实只创建了一个StringBuffer的对象,大大节约了内存的开销

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值