一大波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每个方法前都添加了synchronized关键字来保证线程的同步。但是由于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。

一大波Java来袭(四)String类、StringBuilder类、StringBuffer类对比,布布扣,bubuko.com

时间: 2024-12-25 18:19:03

一大波Java来袭(四)String类、StringBuilder类、StringBuffer类对比的相关文章

解析Java中的String、StringBuilder、StringBuffer类(一)

引言 String 类及其相关的StringBuilder.StringBuffer 类在 Java 中的使用相当的多,在各个公司的面试中也是必不可少的.因此,在本周,我打算花费一些时间来认真的研读一下 String.StringBuilder.StringBuffer类 的相关代码. String的不可变性 这个特性是 String 相当重要的一个特性,为了深入理解,我直接贴上其源代码 public String concat(String str) { int otherLen = str.

一大波Java来袭(三)Java常用类

本文简单介绍集中Java常用类 不同种类的工具用于处理不同的工作.比如:厨房中的工具用于烹饪:农场中的工具用于养殖--对于Java的学习中处理不同的工作也要采用不同的工具.如:处理数学函数问题用Math类.针对文件的操作采用File类--这也充分体现了Java面向对象的特点 一.字符串类(重点理解内存模型) (一)String Java.lang.String字符串常量,具有不可变性. (二)StringBuffer Java.lang.StringBuffer字符串可变量,是线程安全的. (三

一大波Java来袭(二)异常处理

概要解析: 本章的知识点可以记为:1图+5关键字+先逮小的.后逮大的  一.基础 (一)定义 1.异常 是指在程序运行的时候发生的一些异常事件.良好的程序设计应该在异常发生的时候提供处理异常的方法,使得程序不会因为异常的发生而中断.因此Java提供的用于处理程序中错误的一种机制. 2.抛出异常throw java程序的执行过程中如出现异常事件,可以生成一个异常类对象(封装了异常事件的信息),被提交给java运行时系统. 简单理解为:推卸责任.马路上遇到了交通事故,不需要自己处理,而是拨打110,

一大波Java来袭(五)——Java集合概述

把"Java集合"比作是容器,可以把多个对象(实际:是对象的引用),扔在容器中. JDK1.5之前,被丢进集合中的对象,会丢失起数据类型.默认为Object类型 JDK1.5之后,不会丢失数据类型,因为引入了"泛型"(作为下文重点) 本文将结合数据结构,重点讲述Java的4种集合体系的功能和用法,并给出不同应用场景改如何选择? 一.同样是用于"存储数据",既可以使用"数组",有可以使用"集合",有什么区别吗

随笔⑤ String,StringBuilder与StringBuffer类的比较

String,StringBuilder与StringBuffer类的比较 一 可变与不可变 ① String类中使用字符数组保存字符串,如下就是,因为有"final"修饰符,所以可以知道string对象是不可变的.private final char value[]; String 为不可变对象,一旦被创建,就不能修改它的值. 对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去. String变量一旦初始化后就不能更改,禁止改变对象的状态,从而增加共享

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

本文主要介绍String类.StringBuffer类.StringBuilder类的差别  : 一.概述 (一)String 字符串常量.可是它具有不可变性,就是一旦创建,对它进行的不论什么改动操作都会创建一个新的字符串对象. (二)StringBuffer 字符串可变量,是线程安全的,和StringBuilder类提供的方法全然同样. 差别在于StringBuffer每一个方法中前面加入了"synchronized",保证其是线程安全的. (三)StringBuilder 字符串可

6-探秘Java中的String、StringBuilder以及StringBuffer

相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问到的地方,今天就来和大家一起学习一下String.StringBuilder和StringBuffer这几个类,分析它们的异同点以及了解各个类适用的场景.下面是本文的目录大纲: 一.你了解String类吗? 二.深入理解String.StringBuffer.StringBuilder 三.不同场景下三个类的性能测试 四.常见的关于String.StringBuffer的面试题(辟谣网上流传的一些曲解String类

【转】探秘Java中的String、StringBuilder以及StringBuffer

探秘Java中String.StringBuilder以及StringBuffer 相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问到的地方,今天就来和大家一起学习一下String.StringBuilder和StringBuffer这几个类,分析它们的异同点以及了解各个类适用的场景.下面是本文的目录大纲: 一.你了解String类吗? 二.深入理解String.StringBuffer.StringBuilder 三.不同场景下三个类的性能测试 四.常见的关于

探秘Java中的String、StringBuilder以及StringBuffer(转载)

探秘Java中String.StringBuilder以及StringBuffer 相信String这个类是Java中使用得最频繁的类之一,并且又是各大公司面试喜欢问到的地方,今天就来和大家一起学习一下String.StringBuilder和StringBuffer这几个类,分析它们的异同点以及了解各个类适用的场景.下面是本文的目录大纲: 一.你了解String类吗? 二.深入理解String.StringBuffer.StringBuilder 三.不同场景下三个类的性能测试 四.常见的关于