`

String、StringBuilder、StringBuffer三者的区别

    博客分类:
  • Java
阅读更多

一、String 类 

1.String类中使用字符数组保存字符串,如下就是,因为有“final”修饰符,所以可以知道string对象是不可变

private final char value[];

 

2.String的操作都是改变赋值地址而不是改变值操作。
   String a = "a"; //假设a指向地址0x0001 
   a = "b";//重新赋值后a指向地址0x0002,但0x0001地址中保存的"a"依旧存在,但已经不再是a所指向的,a 已经指向了其它地址。 

 

3.String中的对象是不可变的,也就可以理解为常量,显然线程安全

 

总结:String是不可变类,每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间。 

 

二、StringBuffer类 

1.StringBuffer继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,如下就是,可知对象是可变的。

char[] value;

 

2.StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。

 

总结: StringBuffer是可变、线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。


三、StringBuilder类

1.StringBuilder继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,如下就是,可知对象是可变的。

char[] value; 

 

2.StringBuilder并没有对方法进行加同步锁,所以是非线程安全的。


总结: StringBuilder是可变、线程不安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。


四、使用场景 
(1).如果要操作少量的数据使用String。
(2).单线程操作字符串缓冲区下操作大量数据使用StringBuilder。
(3).多线程操作字符串缓冲区下操作大量数据使用StringBuffer。

 

转载请注明出处: http://xieke90.iteye.com/blog/2310032

 

2
3
分享到:
评论

相关推荐

    String&StringBuffer&StringBuilder三者之间的区别-经典解析.doc

    理解这三个类的区别对于任何Java开发者,无论是初学者还是经验丰富的程序员,都是非常重要的。以下是对这三个类的详细解释: 1. **String类**: - **不可变性**:String类的对象一旦创建就不可改变。这意味着当你...

    String、StringBuilder、StringBuffer的区别

    在 Java 中,String、StringBuilder 和 StringBuffer 三者都是字符串处理类,但是它们之间存在着本质的区别。本文将从执行速度、线程安全性、字符串处理方式等方面对这三者进行比较和分析。 首先,从执行速度方面来...

    String-StringBuffer-StringBuilder

    这三者之间的选择主要取决于具体的应用场景。如果字符串操作是在多线程环境下,那么`StringBuffer`是更好的选择,以确保线程安全;而在单线程环境中,为了追求更高的性能,`StringBuilder`应当优先考虑。同时,如果...

    浅谈java中String StringBuffer StringBuilder的区别

    总结一下,三者在运行时间上的效率排序大致为:`String` > `StringBuffer` > `StringBuilder`。如果你在单线程环境中处理字符串,推荐使用`StringBuilder`,因为它既高效又灵活。而在多线程环境中,为了保证线程安全...

    Java 中 String,StringBuffer 和 StringBuilder 的区别及用法

    本文将详细介绍这三者的区别、用法及各自的优缺点。 String String 是 Java 中最基本的字符串类,位于 java.lang 包。它是一个被 final 关键字修饰的类,表示字符串类型。String 类型的特点是不可变的,即一旦创建...

    java String、StringBuilder和StringBuffer的区别详解

    1. **都是字符串类**:这三者都是Java中用于处理文本的类,其中`String`是最基础的字符串类,而`StringBuilder`和`StringBuffer`则是`String`的可变版本。 2. **基于数组存储**:它们内部都是用字符数组来存储字符串...

    辨析Java中的String与StringBuffer及StringBuilder字符串类

    4. **三者的主要区别**: - **线程安全性**:String是不可变的,线程安全;StringBuffer是线程安全的,适合多线程环境;StringBuilder是线程不安全的,适合单线程环境。 - **性能**:在多线程环境下,StringBuffer...

    全面解释java中StringBuilder、StringBuffer、String类之间的关系

    Java中的String、StringBuffer和StringBuilder类都是用于处理字符串的,但它们之间存在显著的区别和应用场景。下面将详细解析这三个类的关系及其特点。 1. **String类** - String类是不可变的,这意味着一旦创建了...

    java基础String类选择题练习题

    - **知识点**:解释`StringBuffer`类是什么,它与`String`类之间的区别,以及何时应该使用`StringBuffer`而不是`String`。 - **例题**:选择题可能会考察对`StringBuffer`的理解,比如“以下哪个类支持可变长度的...

    JavaSE之StringBuilder类与String类

    ### JavaSE之StringBuilder类与String类 ...以上内容详细介绍了如何使用`String`和`StringBuilder`类,以及它们之间的区别。这对于JavaSE入门者来说是非常实用的知识点,希望这些知识点能够帮助到正在学习JavaSE的你。

    07 StringBuilder

    因此,在单线程环境下使用`StringBuilder`通常比使用`StringBuffer`更快,因为后者为多线程环境添加了额外的开销。 #### 二、主要特点 1. **可变性**:`StringBuilder`对象允许在其上执行各种修改操作,如添加、...

    java面试问题总结

    9.StringBuffer和StringBuilder的区别?(实际面试题) 1.在执行速度方面的比较:StringBuilder 快于 StringBuffer 2. StringBuffer与StringBuilder,他们是字符串变量,是可改变的对象,每当我们用它们对字符...

    java String Vector简单初学者代码

    此外,`String`对象经常与`StringBuilder`或`StringBuffer`一起使用,后者在多线程环境下进行字符串拼接时更为高效。 接下来,我们讨论`Vector`类。`Vector`是Java集合框架的一部分,它是动态数组的实现,可以自动...

    java三种字符串处理差别

    根据不同的应用场景和需求,Java提供了多种处理字符串的方式,其中最为常见且重要的三种方式分别为:`String`(字符串常量)、`StringBuffer`(线程安全的字符串变量)以及`StringBuilder`(非线程安全的字符串变量...

    面试总结java工程师

    本文总结了 Java 面试中的重要知识点,涵盖了基本数据类型、抽象类和接口、方法重载和重写、String、StringBuffer 和 StringBuilder 三者的区别、判断字符串是否为空、集合的理解等方面。 1. 基本数据类型 Java 中...

    探秘Java中StringStringBuilder以及S

    在Java编程语言中,字符串处理是一项非常常见的任务。在Java中,有三种主要的类用于创建和操作字符串:`String`, `StringBuilder...在实际开发中,熟练掌握这三者之间的区别和用法,能够有效地提升代码质量并优化性能。

    String类简介

    使用`+`运算符或者`StringBuilder`/`StringBuffer`(线程安全)类来拼接字符串。对于大量拼接操作,推荐使用后两者以提高性能。 **五、转换方法** 1. `toUpperCase()` 和 `toLowerCase()`: 转换为大写或小写。 2. `...

    knowledge-interview:知识学习

    String、StringBuffer、StringBuilder三者的区别: 都在java.lang 包下 String使用final修饰,不可变,每次字符串变更都是创建新的字符串,String s = “a”+"b"除外,频繁变更会导致无引用对象过多,导致gc影响性能...

    java精典编程100例 9

    虽然`StringBuffer`具有线程安全性,但在单线程环境中使用`StringBuilder`通常会更快,因为后者没有同步开销。因此,在多线程环境下使用`StringBuffer`,而在单线程环境下优先考虑`StringBuilder`。 #### 六、...

Global site tag (gtag.js) - Google Analytics