【J2SE】——String、StringBuffer与StringBuilder

本文深入探讨了Java中的String、StringBuffer及StringBuilder的区别与联系,重点介绍了它们的特性和使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       关于String,你了解多少?这里带你重新认识一下String、StringBuffer和StringBuilder到底是怎么一回事。

      

      String


           String 类代表字符串。Java 程序中的所有字符串字面值(如"abc" )都作为此类的实例实现。字符串是常

量,它们的值在创建之后不能更改。

        String源码:

                                                      

      

             由String源码中的final关键字可知,String一旦被赋值就不可在改变,那么,代码里我们经常做这样的操作又

是怎么回事?

                                                       

          其实在第一次给str赋值的过程中,已经在堆中创建了一个地址,用于存放str的值“a”。但是在第二遍str赋值的

过程中,其实并没有覆盖原来的“a”,只是又重新创建了一块地址,存放“b”,所以它的内存显示如下:

                    

                    也就是说,String的实例一旦被赋值就不可以再改变,可以改变的只是String实例的引用。至于未被引用的

值,将会被GC(Garbage Collection)回收。


        StringBuffer(JDK1.0)

       

        看了String,就知道StringBuffer为什么出现了。StringBuffer是可变的字符串序列,相较于String而

言,StringBuffer可以处理多条字符串,并且可以用Append或者Insert改变当前实例的长度和值。

                       


       

        StringBuilder(JDK5.0)    

       

        StringBuilder与StringBuffer类似,都是可变的字符串序列,可用的方法也是append和insert。在单线程的使用

中,与StringBuffer相比,StringBuilder的运行速度更快。但是如果用StringBuilder去实现多线程是不安全的,此时宜

用StringBuffer。

                  

     

       总结

     

       这里再提一下String和StringBuilder吧。最近在看《java特种兵》,里边String语句在compile的时候,如果遇到变

量的时候,都是通过StringBuilder进行编译的。举个“栗子”:

//源码
public static void test(){
      String a = "a" ;
      String b= a + "b";
     
      String compare = "ab";
      System.out.println( b == compare );
}

//编译器编译的代码
String a="a";
StringBuilder temp=new StringBuilder();
temp.append(a).append("b");
String b=temp.toString();


       具体的编译器的实现指令还在研究,有兴趣的可以跟我一起研究研究。


评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值