String StringBuffer StringBuilder区别

String在java虚拟机中被理解为不变的常量,如果他所指的值改变那么他的内存空间就要被回收,
Eg:String a=”aa”; a=a+”b”;或者a=”bb”;
在这里a的值被改变了,所以就要先回收掉a以前的内存,在为其新值分配新内存;
如果对于两个String常量,他们具有相同的值,那么他么引用地址相等即:
String a=”a”; String b=”a”;
那么有a==b 结果为true;因为虚拟机的表现是:对于“a”先检查常量表中是否存在有值与其相等的字符串,如果有直接返回这个值得内存地址给变量a,如果没有那么现在常量池中创建一个值为“a”的字符串,然后再创建a这个变量,并且把现有的常量池中的“a”的内存地址返回给他;对于变量b=”a”也是先检查常量池,检查到已经存在,所以直接将内存地址返回给变量b;

对于String a=”i am “+” a “+” boy “;这句话其实在编译的时候 已经将a的值想加在一起变为了”i am a boy” 所以如果有String b=“i am a boy”那么a==b为true

StringBuffer类是一个线程安全的类,最常用的方法是append(“str”);与insert(index,”str”);它的优势在于进行字符串的拼接的时候是在原来对象上进行而不是新创建内存空间。

StringBuilder是一个单线程的,多线程不安全

整体速度:StringBuilder》StringBuffer》String但是也不是绝对的,也要看具体的情况,比如String a=”i am “+” a “+” boy “; 比StringBuffer a=”i am “; a.append(“a”); a.append(“boy”);因为前者的拼接是发生在编译时期的运行时期已经拼接好!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值