一大波Java来袭(四)String类、StringBuilder类、StringBuffer类对照


本文主要介绍String类、StringBuffer类、StringBuilder类的差别  :  

 一、概述

(一)String

字符串常量。可是它具有不可变性,就是一旦创建,对它进行的不论什么改动操作都会创建一个新的字符串对象。

(二)StringBuffer

字符串可变量,是线程安全的,和StringBuilder类提供的方法全然同样。

差别在于StringBuffer每一个方法中前面加入了"synchronized",保证其是线程安全的。

(三)StringBuilder

字符串可变量,是线程不安全的。

这个类是在JDK 5才開始增加的,是StringBuffer的单线程等价类。(String和StringBuffer类都是JDK 1.0開始)

二、主要方法:

java API提供了处理字符串的绝大多数方法,在敲代码的时候假设须要处理字符串。一定要先查找API。

(一)String

字符串基本操作。具体请參见《String类

(二)StringBuffer

与String类的方法类似。具体请參见《StringBuffer Member

主要用来处理常常变动的字符串。最多的方法是appendinsertdelete方法。

(三)StringBuilder

与StringBuffer类全然同样。具体请參见《StringBuilderClass》。

差别:StringBuffer每一个方法前都加入了synchronizedkeyword来保证线程的同步。

可是因为StringBuilder不运行同步操作。所以速度更快


三、对照

(一)内存对照

下文主要採用图形的方式。对String与StringBuffer(同StringBuilder)进行对照(不同颜色代表不同的内存):

1、举例:运行加法操作a+b

    String的内存变化是:又一次开辟一块新的内存单元。然后把a丢进来。把b对进来。

然后Java中的垃圾回收机制,会自己主动回收原来的内存单元a、b

    StringBuffer内存变化:直接把b加入在a的尾巴后面。不须要好从新开辟新的内存单元。Append方法

2、举例:在a中指定位置插入b

(二)效率对照

    因为String类是不可变的。每次对其改变都要创建新字符串对象。所以它是最慢的; StringBuilder不须要运行同步操作。速度要比StringBuffer快。

    即运行改动操作的速度从高到低为:

         StringBuilder  >  StringBuffer  >  String


四、怎样选择

    String是字符串常量,一旦创建就不能改动。StringBuffer和StringBuilder是字符串可变量,能够改动,可是StringBuffer是线程安全的,StringBuilder是线程不安全的。

选择方法: 

假设非常少改动,使用String。毕竟它最简单; 

假设常常改动,且是线程,使用StringBuilder

假设常常改动,且是线程,使用StringBuffer。

 

原文地址:https://www.cnblogs.com/gcczhongduan/p/5072141.html