String、StringBuilder和StringBuffer的区别

String

  1. JVM会先在常量池查找是否存在相同的字面常量,如果存在,则直接将引用指向已经存在的字面常量;否则在运行时常量池开辟一个空间来存储该字面常量,并将引用指向该字面常量。

    String str1 = "hello world";   //"hello world"存储在常量池
    String str2 = "hello world";   //str2与str1地址相同,都指向常量池中的"hello world"
    String str3 = new String("hello world");   //str3存储在堆上
    
  2. String是final类型,对String对象的任何改变都不影响到原对象,相关的任何change操作都会生成新的对象。

  3. 对String进行操作
    过程:将str中的内容取出,与“world”相加并存入一个新new的String中,再将str指向新new的String。如果频繁进行相加的操作,资源开销大

    String str = "hello";
    for(int i = 0; i < 100000; i++)
    	str += "world";  
    
    //str += "world"; 等于
    StringBuilder stringBuilder = new StringBuilder(str);
    stringBuilder.append("world");
    

StringBuilder & StringBuffer

  1. 由于对String进行操作都会生成新的String,开销大。因此,需要操作字符串时,一般使用StringBuilder或StringBuffer。使用StringBuilder,只需要new一次,之后再添加只需调用方法append()
  2. StringBuffer比较StringBuilder,具有线程安全性,但效率更低
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值