`
wx1568520008
  • 浏览: 20437 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

java中String、StringBuilder、StringBuffer的区别

 
阅读更多

一、认识String
String类型是不可变类型,为了保持文章的独立性,还是拿出来这个老掉牙的例子:

a0695c0264fa954f0a0e6760dbd3c29c647.jpg

    在这里我们一开始给变量a赋值为“张三”,后来又赋值为"李四",是不是有个疑问,不是说String类型不可变嘛,在这里怎么变了,想要解决这个问题,我们还要深入String源码。下面是jdk1.8_171中String类型的一部分源码:

19f5efe66c6a56bd9502e6e61aa62a4713f.jpg

    这里最核心的就是这个value字符串数组。也就是说我们的String的内容其实是被分割成了一个一个字符保存在了value数组当中,而且我们的String类型是final类型,value也是final类型,这就意味着我们再被集成和修改了。但是为什么我们还可以对上述的a对象赋值了两次呢?下面用一张图你就明白了。825c44e4a26820fff22e17e1535fdf41538.jpg

    也就是说我们的a对象其实没有改变,改变的是value数组指向的内容,因为value是数组也是引用类型,所以指向的内容可以随之改变,而且每一次赋值一个字符串,都会在内存中创建一个新的对象。当然了也有办法可以改变String类型,比如通过反射。其实通过上面的图相信也应该能明白为什么有了String还需要StringBuilder和StringBuffer。那是因为String每一次增删改的操作都是在内存中创建了一个新的字符串,如果增删改的操作很多,那对我们的内存将造成极大的浪费,为此还需要StringBuilder和StringBuffer去解决这个问题。

二、StringBuilder和StringBuffer
    StringBuilder和StringBuffer是可变的,也就说我们的增删改都是在原字符串的基础上操作的,操作次数再多内存也不会被白白的浪费,那他们俩又有什么区别呢?

    StringBuffer是线性安全的,支持并发操作,适合多线程。
    StringBuilder线性不安全,不支持并发操作,适合单线程。

 

    也就是说他们俩区别就在于支不支持并发操作,使用上基本上类似,知道上面的区别之后就可以根据自己的业务需求来决定具体使用哪一个。这里就以StringBuffer为例说明一下吧。

1、构造方法

 

0e719f278296948dff5690f357b5d5624cb.jpg

2、增删改操作

c33c4f0fead624b2442710f18d897a13824.jpg

三、三者之间的性能测试
在这里其实就是对于其基本操作谁的效率最快的问题。
第一步:测试String执行1万次增加操作

d8d5917cb896387504e50b9fae9923acd36.jpg

第二步:测试StringBuilder执行1万次增加操作

b85e645bc1cf1369c40f474869ef3c37550.jpg

第四步:测试一下:

7613c2d49f616397a8758907a0fe3b92e6a.jpg

 

088b7a48c74f3d9904dbbff9ceb321f3932.jpg

这个结果其实已经很明显了:
    StringBuilder 和StringBuffer >的效率远远大于String。因为这里是在单线程中去测试的,所以StringBuilder的时间比StringBuffer的稍微少一点,但是多线程可能就不一定了。所以他们两者其实是没法比较的。

转载于:https://my.oschina.net/u/4167465/blog/3089459

分享到:
评论

相关推荐

    String StringBuffer和StringBuilder区别之源码解析

    在Java中,字符串是我们经常使用的数据类型,而String、StringBuffer和StringBuilder是Java中三种常用的字符串类。在这篇文章中,我们将从源码角度对String、StringBuffer和StringBuilder进行深入分析,了解它们之间...

    String、StringBuilder和StringBuffer的区别

    在Java编程语言中,String、StringBuilder和StringBuffer都是用来处理字符串的类,它们之间存在一些重要的区别,主要涉及到性能和线程安全性。 首先,`String`类代表的是字符串常量,一旦创建,其内容就不能改变。...

    Java中String,StringBuffer与StringBuilder的区别

    Java 中 String, StringBuffer 与 StringBuilder 的区别 Java 中 String, StringBuffer 与 StringBuilder 三种字符串类型的区别是很多开发者经常混淆或不了解的知识点。今天,我们将深入探讨这三种字符串类型的区别...

    String、StringBuffer与StringBuilder之间区别

     StringBuffer:字符创变量  StringBuilder:字符创变量  从上面的名字可以看到,String是“字符创常量”,也就是不可改变的对象。对于这句话的理解你可能会产生这样一个疑问 ,比如这段代码:

    String ,StringBuffer与StringBuilder

    在 Java 中,String, StringBuffer 和 StringBuilder 三个类都是用于字符操作的,但它们之间有着很大的区别。 首先,String 是不可变类,意味着一旦创建了 String 对象,就不能修改它的值。每次对 String 对象的...

    String、StringBuffer、StringBuilder的使用方法

    在Java编程语言中,`String`、`StringBuffer`和`StringBuilder`是处理字符串的三个重要类,它们各自有特定的使用场景和优缺点。理解它们的差异对于编写高效的代码至关重要。 **String类** `String`是不可变的类,...

    String及StringBuffer和StringBuilder的区别

    String、StringBuffer 和 StringBuilder 是 Java 语言中三种不同类型的字符串处理方式,它们之间存在着明显的性能和线程安全性差异。 String String 类型是不可变的对象,每次对 String 对象进行改变时都会生成一...

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

    "Java 中 String、StringBuffer 和 StringBuilder 的区别及用法" Java 中 String、StringBuffer 和 StringBuilder 是三个常用的字符串操作类,了解它们之间的区别对 Java 开发者来说非常重要。本文将详细介绍这三者...

    《剑指offer》Java-String、StringBuffer 和 StringBuilder 的区别.pdf

    在Java编程语言中,String、StringBuffer和StringBuilder都是用来处理字符串的对象,但它们之间存在显著的区别。String是最常见的字符串类型,它的特点是不可变性。这意味着一旦一个String对象被创建,就不能进行...

    java 中String和StringBuffer与StringBuilder的区别及使用方法

    Java 中 String 和 StringBuffer 与 StringBuilder 的区别及使用方法 Java 中 String、StringBuffer 和 StringBuilder 是三个常用的字符串操作类,每个类都有其特点和使用场景。在开发过程中,正确选择合适的字符串...

    String-StringBuffer-StringBuilder

    在Java编程语言中,`String`、`StringBuffer`和`StringBuilder`都是用来处理字符串的类,但它们之间存在显著的差异,主要体现在性能、线程安全性和使用场景上。 首先,`String`是最基本的字符串类,它代表的是不可...

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

    在Java编程语言中,String、StringBuilder和StringBuffer都是用来处理字符串的重要类,它们各有特点,适用于不同的场景。这里我们将深入探讨这三个类的区别、特性和使用策略。 首先,String类是不可变的,这意味着...

    浅谈java中String StringBuffer StringBuilder的区别

    在Java编程语言中,String、StringBuffer和StringBuilder都是用来处理字符串的类,但它们之间存在显著的性能和功能差异。下面我们将深入探讨这三个类的区别。 首先,`String`类是Java中最基本的字符串类型,它表示...

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

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

    Java String StringBuilder StringBuffer

    在Android/Java开发中,用来处理字符串常用的类有3种: String、StringBuilder、StringBuffer。  它们的异同点:  1) 都是 final 类, 都不允许被继承;  2) String 长度是不可变的, StringBuffer、...

    你知道String、StringBuffer和StringBuilder的区别吗

    在Java编程语言中,String、StringBuffer和StringBuilder都是用来处理字符串的重要类,它们各自具有不同的特性和使用场景。下面将详细解析这三个类的区别。 首先,`String`类是最基础的字符串处理类,它被设计为不...

    String、StringBuilder、StringBuffer的区别

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

    String与StringBuffer区别详解

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

Global site tag (gtag.js) - Google Analytics