Java语言中的String、StringBuffer和StringBuilder实例分析
小标 2018-11-26 来源 : 阅读 1112 评论 0

摘要:本文主要向大家介绍了Java语言中的String、StringBuffer和StringBuilder实例分析,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

本文主要向大家介绍了Java语言中的String、StringBuffer和StringBuilder实例分析,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。


String类中使用字符数组来保存数据private final char value[],因为有“final”修饰符,所以String对象是不可变的。


StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存数据char[] value,这两种对象都是可变的。


String类是字符串常量,是不可更改的常量。而StringBuffer是字符串变量,它的对象是可以扩充和修改的。


StringBuffer sb=new StringBuffer("[");//创建StringBuffer对象  

sb.append("hehe");//把hehe加入字符串,变成 "[hehe"    

sb.append("]");//append();不会制造垃圾,真正在改sb的值;  

System.out.println(sb);    

String str = sb.toString();//把"[hehe]",赋值给一个字符串对象str

   


StringBuilder,一个可变的字符序列。此类提供一个与StringBuffer兼容的API,但不保证同步。该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比StringBuffer要快。


StringBuilder sb=new StringBuilder("[");//创建StringBuilder对象  

sb.append("hehe");//把hehe加入字符串,变成 "[hehe"    

sb.append("]");//append();不会制造垃圾,真正在改sb的值;  

System.out.println(sb);    

String str = sb.toString();//把"[hehe]",赋值给一个字符串对象str

   


1. 线程安全问题


String中的对象是不可变的,也就可以理解为常量,所以是线程安全。


AbstractStringBuilder是StringBuilder与StringBuffer的公共父类,定义了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。


StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。看如下源码:


public synchronized StringBuffer reverse() {

super.reverse();

return this;

}

public int indexOf(String str) {

return indexOf(str, 0);        //存在 public synchronized int indexOf(String str, int fromIndex) 方法

}

   


StringBuilder并没有对方法进行加同步锁,所以是非线程安全的。


2.StringBuilder与StringBuffer共同点


StringBuilder与StringBuffer有公共的抽象父类AbstractStringBuilder。


StringBuilder、StringBuffer的方法都会调用AbstractStringBuilder中的公共方法,如super.append(...)。只是StringBuffer会在方法上加synchronized关键字,进行同步。


如果程序不是多线程的,那么使用StringBuilder效率高于StringBuffer。


          

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!


本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程