Java中String、StringBuffer 与StringBuilder的不同

1、String 是不可变的

String字符串一旦创建不可更改,如下:

public static void main(String[] args) {
    String s = "hello";
    System.out.println(s);//hello
    tell(s);
    System.out.println(s);//hello
    s= s +"word";
    System.out.println(s);//helloword
}
public static void tell(String s ){
    s = "word";
    System.out.println(s);//word
}

可以看出,定义字符串s为hello后,在堆内存中为“hello”的s分配一块内存,调用tell函数后,又为tell函数中的“word”新分配一块内存,运行S+“word”时,又重新分配了一块内存,调用tell函数后重新输出s,s仍为“hello”。

这里写图片描述

2.StringBuffer 是可变的。

public static void main(String[] args) {
    StringBuffer s = new StringBuffer();
    s.append("hello");
    System.out.println(s.toString());//hello
    tell(s);
    System.out.println(s.toString());//helloword
}
public static void tell(StringBuffer s ){
    s.append("word");
    System.out.println(s.toString());//helloword
}

由上面的例子可以看出,StringBuffer是可变的。使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象并改变对象引用。所以多数情况下推荐使用 StringBuffer ,特别是字符串对象经常改变的情况下。
3、StringBuilder
一个可变的字符序列。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。但是将 StringBuilder 的实例用于多个线程是不安全的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值