Java中的String、StringBuilder的区别

最近在学习Java,之前学习的String类,后面又学习了StringBuilder类,有点搞不清楚这二者的区别。自己在网上也找了一些资料,所以在这里重新整理一下,便于自己以后整理和复习。如果存在错误,恳请指正。

1、String

String 类代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。 字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。
但是像如下的代码:

String str = "Hello ";
System.out.println(str);
str = str + "World!";
System.out.println(str);

输出的结果为:

Hello 
Hello World!

看上去像是把字符串的内容发生的改变,将“World”连接在了str字符串后面,但是这只是一个假象,实际上JVM在堆内存中创建了一个新的“Hello World!”字符串,并且将这个字符串的地址赋值给了str,str原本存放的是“Hello!”的地址,现在转向了“Hello World!”字符串。而原来的str就会被JVM的垃圾回收机制给回收掉了,字符串的内容并没有发生改变,也就是上面说的String对象是常量,它们的值在创建之后不能更改。所以String对象进行的操作实际上是一个不断创建新的对象并且将旧对象回收的的过程,执行速度比较慢。

2、StringBuilder

StringBuilder是一个可变的字符序列。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。每个字符串生成器都有一定的容量。只要字符串生成器所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区。如果内部缓冲区溢出,则此容量自动增大。扩展为原数组长度的2倍加2,创建一个新的数组,并将数组的数据复制到新数组,所以对于拼接字符串效率要比String要高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值