`

String、StringBuffer与StringBuilder详解

阅读更多
1.三者在执行速度方面的比较:StringBuilder >  StringBuffer  >  String

  2.String <(StringBuffer,StringBuilder)的原因

    String:字符串常量
    StringBuffer:字符串变量
    StringBuilder:字符串变量


    从上面的名字可以看到,String是“字符串常量”,也就是不可改变的对象。对于这句话的理解你可能会产生这样一个疑问  ,比如这段代码:
 String s = "abcd";
 s = s+1;
 System.out.print(s);// result : abcd1

我们明明就是改变了String型的变量s的,为什么说是没有改变呢? 其实这是一种欺骗,JVM是这样解析这段代码的:首先创建对象s,赋予一个abcd,然后再创建一个新的对象s用来    执行第二行代码,也就是说我们之前对象s并没有变化,所以我们说String类型是不可改变的对象了,由于这种机制,每当用String操作字符串时,实际上是在不断的创建新的对象,而原来的对象就会变为垃圾被GC回收掉,可想而知这样执行效率会有多底。

     而StringBuffer与StringBuilder就不一样了,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,这样就不会像String一样创建一些而外的对象进行操作了,当然速度就快了。

String str = “This is only a” + “ simple” + “ test”;
StringBuffer builder = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);

你会很惊讶的发现,生成str对象的速度简直太快了,而这个时候StringBuffer居然速度上根本一点都不占优势。其实这是JVM的一个把戏,实际上:

    String str = “This is only a” + “ simple” + “test”;
    其实就是:
    String str = “This is only a simple test”;

    所以不需要太多的时间了。但大家这里要注意的是,如果你的字符串是来自另外的String对象的话,速度就没那么快了,譬如:
    String str2 = “This is only a”;
    String str3 = “ simple”;
    String str4 = “ test”;
    String str1 = str2 +str3 + str4;

    这时候JVM会规规矩矩的按照原来的方式去做。

 4.StringBuilder与 StringBuffer

    StringBuilder:线程非安全的
    StringBuffer:线程安全的
当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。

对于三者使用的总结: 1.如果要操作少量的数据用 = String

                        2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder

                        3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer
分享到:
评论

相关推荐

    java CharSequence、String、StringBuffer、StringBuilder详解

    在Java编程语言中,`CharSequence`是一个接口,它是字符序列的抽象基类,包括`String`、`StringBuffer`和`StringBuilder`等类。理解这些类的特点和用途是优化程序性能的关键。以下是对这些概念的详细解释: 1. `...

    Java中String、StringBuffer、StringBuilder的区别详解

    Java中的字符串处理是编程中常见的任务,涉及到三个关键类:String、StringBuffer和StringBuilder。它们在功能上相似,但有着重要的区别,主要体现在字符串的可变性、线程安全性和性能方面。 1. 可变性 - String类...

    StringBuffer 和 StringBuilder 类

    《Java中的StringBuffer与StringBuilder类详解》 在Java编程中,当我们需要对字符串进行多次修改时,StringBuffer和StringBuilder类成为首选。这两个类提供了一种高效且灵活的方式来处理字符串,与不可变的String类...

    String与StringBuffer区别详解

    在Java编程语言中,`String`和`StringBuffer`(在Java 5之后被`StringBuilder`取代,但在多线程环境中仍然使用`StringBuffer`)是处理文本字符串的两个核心类,它们各自有着不同的特性和用途。理解它们的区别对于...

    String总概况及其特性并与StringBuffer的区别详解

    ### String总概况及其特性并与StringBuffer的区别详解 在Java编程语言中,`String`与`StringBuffer`是非常重要的数据类型,被广泛应用于处理文本数据。本文将深入探讨这两个类的基本特性以及它们之间的区别。 ####...

    Java 中String StringBuilder 与 StringBuffer详解及用法实例

    其中,StringBuilder是Java 5引入的新类,它与StringBuffer功能类似,但不保证线程安全。这意味着在单线程环境下,StringBuilder通常比StringBuffer更快,因为它省去了同步开销。 StringBuffer是在多线程环境下使用...

    java String、StringBuilder和StringBuffer的区别详解

    Java中的`String`、`StringBuilder`和`StringBuffer`都是用来处理字符串的类,它们各自有不同的特性和适用场景。在理解它们之间的区别之前,我们首先要知道它们的共同点。 **共同点:** 1. **都是字符串类**:这三...

    StringBuffer和String_区别

    ### StringBuffer与String的区别详解 #### 一、概念与特性 **String** 是 Java 中一个不可变的类,代表了字符序列。一旦一个 String 对象被创建后,其内容就不能被改变。这使得 String 类非常适合用来表示常量或者...

    Java String 和StringBuffer的详解及区别

    Java String 和StringBuffer 的详解及区别 Java String 和StringBuffer 是 Java 语言中两个基本的字符串类,它们都是用于存储和操作字符串的,但是它们之间有着很大的区别。 String 类 String 类表示内容不可改变...

    String、StringBuilder和StringBuffer超详解

    4. **StringBuilder与StringBuffer** - `StringBuilder`和`StringBuffer`是可变的,它们提供了在已有字符串基础上添加、删除、替换字符的方法,如`append()`、`insert()`、`delete()`等,而不会每次操作都创建新...

    java StringBuilder详解

    本篇文章将深入解析`StringBuilder`的使用方法、内部机制以及与`StringBuffer`的区别。 `StringBuilder`是Java中的一个类,它位于`java.lang`包下,主要负责动态构建和修改字符串。与`String`不同,`String`对象是...

    Java软件开发实战 Java基础与案例开发详解 9-2 StringBuffer和String Builder类共9页.pdf

    - `StringBuilder`与`StringBuffer`非常相似,但在非多线程环境中通常更快,因为它不保证线程安全。 - 当字符串操作仅在一个线程中发生时,推荐使用`StringBuilder`以提高性能。 - **构建过程**: 1. 创建一个空...

    JavaSE之StringBuilder类与String类

    ### JavaSE之StringBuilder类与String类 #### 一、String类概述 在Java语言中,`String`类是非常重要的一个类,它代表了不可变的字符序列,即一旦创建了一个`String`对象,其内容就不能被修改。由于`String`类的不...

    10个Java经典的String面试题

    答案:String、StringBuffer、StringBuilder 最大的不同是 String 不可变,后者可变。StringBuffer 是线程安全的,StringBuilder 线程不安全但是速度较快。StringBuffer 和 StringBuilder 都是可变的,但是 ...

    java StringBuffer详解

    本篇文章将深入探讨`StringBuffer`的原理、用法及其与`StringBuilder`的区别。 1. **基本概念** `StringBuffer`是Java中处理字符串的类,它继承自`AbstractStringBuilder`并实现了`Serializable`和`CharSequence`...

    07 StringBuilder

    ### Java中的StringBuilder详解 在Java编程语言中,`StringBuilder`是一个非常重要的类,它提供了一种高效地构建和操作字符串的方式。与`String`不同,`StringBuilder`对象是可变的,这意味着可以在不创建新对象的...

    Java重点面试题 – 针对java面试过程中经常遇到的一些试题进行总结.docx

    Java编程语言在面试中常常涉及一系列关键概念,这些概念包括方法的重载(overload)与覆盖(override)、接口与抽象类的区别、String、StringBuffer与StringBuilder的特性比较、ArrayList、LinkedList与Vector的差异、...

    详解Java的String类型程序

    ### Java中的String类型详解 在Java编程语言中,`String` 类型是非常基础且重要的数据类型之一,它代表了一系列字符的有序集合。本篇文章将基于一个具体的示例代码,深入探讨`String`对象的创建、比较以及不同字符...

    Android StringBuffer的使用方法详解

    StringBuffer与String类的主要区别在于其内部实现机制和线程安全性。String对象在进行任何修改时,都会创建一个新的对象,这在内存管理上并不理想,特别是在大量操作时。而StringBuffer则通过维护一个可变的字符序列...

Global site tag (gtag.js) - Google Analytics