String, StringBuffer,StringBuilder的区别

javaStringStringBufferStringBuilder是编程中经常使用的字符串类,都实现了CharSequence、Serializable接口。

StringBuilderStringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,如下就是,可知这两种对象都是可变的。

char[] value;

     StringBuffer:是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象 , 它只能通过构造函数来建立,  如: StringBuffer sb = new StringBuffer();

不能通过赋值符号对他进行付值.   sb = "welcome to here!";//error 
对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.StringBuffer中赋值的时候可以通过它的append方法.     sb.append("hello");

1.可变与不可变

String类中使用字符数组保存字符串private final char value[];,看源码,因为有“final”修饰符,所以可以知道string对象是不可变的。

      String 为不可变对象,一旦被创建,就不能修改它的值. . 对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去,一旦创建直到这个对象被销毁。

构造器

equals方法

compareTo方法

contentEquals(StringBuffer sb):

字符串拼接:

将字符数组连缀成字符串。
String.copyValueOf(char[] data );
String.copyValueOf(char[] data, int offset, int count);

byte[] getBytes()

2.是否多线程安全

String中的对象是不可变的, 显然线程安全 

AbstractStringBuilderStringBuilderStringBuffer的公共父类,定义了一些字符串的基本操作,如expandCapacityappendinsertindexOf等公共方法。

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

 

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

 3.StringBuilderStringBuffer

StringBuilderStringBuffer有公共父类AbstractStringBuilder( 抽象类 )

capacity比length大,不需要关注。可以通过设置setlength重新设置大小。

抽象类与接口的其中一个区别是:抽象类中可以定义一些子类的公共方法,子类只需要增加新的功能,不需要重复写已经存在的方法;而接口中只是对方法的申明和常量的定义。

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

单线程中,那么使用StringBuilder效率高于StringBuffer,频繁的修改字符串所以首先考虑StringBuilder,多线程的情况使用StringBuffer.不频繁修改情况下使用String。

String, StringBuffer,StringBuilder相关推荐

  1. String,StringBuffer,StringBuilder三者的异同

    String,StringBuffer,StringBuilder三者的异同:? String:不可变的字符序列;底层使用char[]存储(用final修饰) StringBuffer:可变的字符序列 ...

  2. 重温java中的String,StringBuffer,StringBuilder类

    不论什么一个系统在开发的过程中, 相信都不会缺少对字符串的处理. 在 java 语言中, 用来处理字符串的的类经常使用的有 3 个: String.StringBuffer.StringBuilder ...

  3. 浅谈 Java 字符串(String, StringBuffer, StringBuilder)

    我们先要记住三者的特征: String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) 一.定义 查看 API 会发现,String ...

  4. String, StringBuffer, StringBuilder之间的区别

    String与StringBuffer/StringBuilder之间的主要区别 1.String对象不可变, 如果修改会重新创建一个对象, 然后把值保存进去. StringBuffer/String ...

  5. java中 String StringBuffer StringBuilder的区别

    * String类是不可变类,只要对String进行修改,都会导致新的对象生成. * StringBuffer和StringBuilder都是可变类,任何对字符串的改变都不会产生新的对象. 在实际使用 ...

  6. `java`学习笔记(十二)`Java`--`String``StringBuffer``StringBuilder`

    Java–String&&StringBuffer&&StringBuilder 文章目录 `Java`--`String`&&`StringBuffe ...

  7. StringBuffer类,StringBuffer类和String的区别、String,StringBuffer,StringBuilder之间的区别

    1.概述 StringBuffer是一个线程安全的可变序列. 2.StringBuffer与String区别 (1)StringBuffer的长度和内容都可以发生改变,String却不行 (2)Str ...

  8. 2019-7-9 [JavaSE] String ,StringBuffer,StringBuilder比较 装箱和拆箱 日期类 正则

    文章目录 1.StringBuffer类 方法: 利用StringBuffer开头与结束的时间计算: String ,StringBuffer,StringBuilder比较 2.装箱和拆箱 3.日期 ...

  9. 116day(String,StringBuffer,StringBuilder,模拟器和虚拟机的区别,复合命题的种类)

    <2018年2月4日>[连续116天] 标题:String,StringBuffer,StringBuilder,模拟器和虚拟机的区别,复合命题的种类: 内容: A.详见http://bl ...

最新文章

  1. 谷歌新深度学习系统可以促进放射科医生的发展
  2. 鲲鹏数据开源库python_google_translator介绍
  3. lenovo vantage工具栏无反应 电池图标单击无法显示状态栏
  4. Spring Cloud GatewayAPI网关服务
  5. 2017年内容安全十大事件盘点
  6. ASP.NET Core中使用IOC三部曲(一.使用ASP.NET Core自带的IOC容器)
  7. Stomp-Spring服务器端的Web套接字Java客户端
  8. 总结各类损失函数【修】
  9. 经营你的iOS应用日志(二):异常日志
  10. java 编码格式 utf 8_关于java生成UTF-8编码格式文件的诡异问题
  11. LINUX下载编译zlib
  12. 网络基础之TCP/IP五层模型
  13. 寻找春天nbsp;九宫格日记-2012.08.03
  14. 贪心算法——国王游戏(洛谷P1080)
  15. 你的人生是先装石头还是装沙子?
  16. 光伏电站远程监控应用方案
  17. springboot(一):构建最简单的springboot项目
  18. 树莓派4B debian嵌入式远程连接远程控制xrdp(Ubuntu为例)
  19. JAVA微信公众号开发第11微信发红包
  20. 史玉柱高调杀回IT产业 2亿元豪赌网游征途

热门文章

  1. Canvas drawImage
  2. Linux-sed command
  3. [MyBatis]诡异的Invalid bound statement (not found)错误
  4. 不使用border-radius,实现一个可复用的高度和宽度都自适应的圆角矩形
  5. FireFox不支持InnerText的解决方法
  6. java mediator模式_Java实现中介者模式-Mediator Pattern
  7. 上计算机课玩游戏检讨400字,上网课玩游戏检讨书
  8. 直接获取Program Files目录的API
  9. 有关 strongSwan 的英文文档
  10. 模块化加载_前端模块化概述