String,StringBuffer, StringBuilder的区别

1.实现原理

String:没有继承AbstractStringBuilder,存放字符串内容的是private final char value[];说明了String对象一旦创建内容就定了,不可修改。是一个常量。

可能有人会有疑问?

String str = "123";
str = str + "456";

这里str的内容不是改变了吗?首先str是一个对象引用,它第一次句指向了对象“123”,第二句指向了新的对象str+"456"。已经是不同的对象了。对String不是很了解的,可以看一下我写一篇文章:菜鸟入坑》String深入了解。可能写得不是很好!大笑!!!

StringBuilder:继承了AbstractStringBuilder,存放字符串内容的是char[] value;说明了StringBuilder对应创建了之后,内容可以随意改动。是一个变量。

StringBuilder stringBuilder = new StringBuilder("123456");
System.out.println(stringBuilder);
stringBuilder.append("ww");
System.out.println(stringBuilder);

StringBuffer:继承了AbstractStringBuilder,存放字符串内容的是char[] value,说明了StringBuffer对应创建了之后,内容可以随意改动。是一个变量。StringBuffer的对可以影响AbstractStringBuilder类的成员变量的方法都加了synchronized修饰。所以是线程安全的。

StringBuffer stringBuffer = new StringBuffer("123456");
System.out.println(stringBuffer);
stringBuffer.append("qqq");
System.out.println(stringBuffer);

三者都是final修饰的类,所以都无法再被继承。

2.性能比较

StringBuilder>StringBuffer>String

3.线程安全性

String:不存在线程安全不安全问题。

StringBuilder:线程不安全的。

StringBuffer:线程安全的。


最后总结一下:

在for循环中如果需要多次拼接字符串,必须考虑性能问题。可以考虑使用StringBuffer或StringBuilder,如果是不考虑线程安全问题两者都可以使用,如果考虑线程安全问题只能用StringBuffer。

由于很多东西还没有深究,可能存在问题,有问题还请大牛指出。准备换工作了,顺便总结一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值