zoukankan      html  css  js  c++  java
  • 一大波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。

     

  • 相关阅读:
    Linux下gdb attach的使用(调试已在运行的进程)
    Linux ps 命令
    SemaphoreFullException when checking user role via ASP.NET membership
    c程序内存分布
    正则表达式
    事务实战感悟
    oracle免客户端安装 plsql连接
    关于tomcat的热部署
    json工具包比较 fastjson jackson gson
    图片 滚动 放大缩小 旋转
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5072141.html
Copyright © 2011-2022 走看看