• 一大波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。

     

  • 相关阅读:
    【2020-01-28】陪伴即陪伴,擦汗即擦汗
    【2020-01-27】曼巴走了,但他还在
    【2020-01-26】今年,远亲不如近邻了
    【2020-01-25】新的一年,新的传统
    【2020-01-24】上天为这小女孩开了一扇小小窗
    【2020-01-23】故作假装的毛病
    day 31 html(二) 和css入门
    前端 day 30 html 基础一
    day 17python 面对对象之继承
    多并发编程基础 之协成
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5072141.html
Copyright © 2020-2023  润新知