码迷,mamicode.com
首页 > 编程语言 > 详细

关于Java基础知识 String StringBuffer StringBuilder三者的区别

时间:2020-02-06 14:59:14      阅读:63      评论:0      收藏:0      [点我收藏+]

标签:for   strong   har   的区别   接受   rac   例子   storage   多例   

Java基础中String StringBuffer StringBuilder 以下介绍

相同点:String,StringBuffer,StringBuilder最终底层存储与操作的都是char数组,StringBuffer和StringBuilder都继承了AbstractStringBuilder

不同点:String:char数组是final的,不可变,修改String时实际上是new一个新String对象返回,线程安全,频繁的增删操作时不建议使用

    StringBuffer:线程安全(StringBuffer中的方法中加synchronized锁),多线程建议使用这个,修改值时实际上是修改底层的char数组,相比String,开销更小

    StringBuilder:非线程安全的(StringBuilder中的方法中没加synchronized锁), 单线程使用这个更快,修改值时实际上是修改底层的char数组,相比String,开销更小

效率比较:StringBuilder > StringBuilder > String

 

 

StringStringBuffer、StringBuilder它们三者都是来自Java.lang包下的类.。

String 底层源码如下定义:

/** The value is used for character storage. */
private final char value[];

/** The offset is the first index of the storage that is used. */
private final int offset;

/** The count is the number of characters in the String. */
private final int count;

用于存放字符的数组被声明为 final 的,因此只能赋值一次,不可再更改。

 

StringBuffer(JDK1.0)

StringBuffer:字符串变量(Synchronized,即线程安全)。如果要频繁对字符串内容进行修改,出于效率考虑最好使用 StringBuffer,如果想转成 String 类型,可以调用 StringBuffer 的 toString() 方法。

StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。

  • append():始终将这些字符添加到缓冲区的末端;
  • insert():则在指定的点添加字符。
  • --网上有很多例子这里不多唠嗑

StringBuilder(JDK5.0)

StringBuilder:字符串变量(非线程安全)。在内部,StringBuilder 对象被当作是一个包含字符序列的变长数组。

java.lang.StringBuilder 是一个可变的字符序列,是 JDK5.0 新增的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。

 

关于Java基础知识 String StringBuffer StringBuilder三者的区别

标签:for   strong   har   的区别   接受   rac   例子   storage   多例   

原文地址:https://www.cnblogs.com/bubeibukang/p/12268498.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!