String是不可变的,对String进行改变的时候,都要生成新的String对象,在变量添加的时候效率低,但是在 String S1 = “This is only a” + “ simple” + “ test”;这种情况效率高。
StringBuffer是可变的,append添加的时候不生成新的对象,效率高,是线程安全的。
StringBuilder比StringBuffer速度快,因为线程不安全。
String
字符串常量
StringBuffer
字符串变量(线程安全)
StringBuilder
字符串变量(非线程安全)
简要的说,
String
类型和
StringBuffer
类型的主要性能区别其实在于
String
是不可变的对象
,
因此在每次对
String
类型进行改变的时候其实都等同于生成了一个新的
String
对象,然后将指针指向新的
String
对象,所以经常改变内容的字符串最好不要用
String
,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后,
JVM
的
GC
就会开始工作,那速度是一定会相当慢的。
而如果是使用
StringBuffer
类则结果就不一样了,每次结果都会对
StringBuffer
对象本身进行操作,而不是生成新的对象,再改变对象引用。所以在一般情况下我们推荐使用
StringBuffer
,特别是字符串对象经常改变的情况下。而在某些特别情况下,
String
对象的字符串拼接其实是被
JVM
解释成了
StringBuffer
对象的拼接,所以这些时候
String
对象的速度并不会比
StringBuffer
对象慢,而特别是以下的字符串对象生成中,
String
效率是远要比
StringBuffer
快的:
String S1 = “This is only a” + “ simple” + “ test”;
StringBuffer Sb = new StringBuilder(“This is only a”).append(“
simple”).append(“ test”);
你会很惊讶的发现,生成
String S1
对象的速度简直太快了,而这个时候
StringBuffer
居然速度上根本一点都不占优势。其实这是
JVM
的一个把戏,在
JVM
眼里,这个
String S1 = “This is only a” + “ simple” + “test”;
其实就是:
String S1 = “This is only a simple test”;
所以当然不需要太多的时间了。但大家这里要注意的是,如果你的字符串是来自另外的
String
对象的话,速度就没那么快了,譬如:
String S2 = “This is only a”;
String S3 = “ simple”;
String S4 = “ test”;
String S1 = S2 +S3 + S4;
这时候
JVM
会规规矩矩的按照原来的方式去做
在大部分情况下
StringBuffer > String
StringBuffer
Java.lang.StringBuffer
线程安全的可变字符序列。一个类似于
String
的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。
可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。
StringBuffer
上的主要操作是
append
和
insert
方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。
append
方法始终将这些字符添加到缓冲区的末端;而
insert
方法则在指定的点添加字符。
例如,如果
z
引用一个当前内容是
“start”
的字符串缓冲区对象,则此方法调用
z.append("le")
会使字符串缓冲区包含
“startle”
,而
z.insert(4, "le")
将更改字符串缓冲区,使之包含
“starlet”
。
在大部分情况下
StringBuilder > StringBuffer
java.lang.StringBuilde
java.lang.StringBuilder
一个可变的字符序列是
5.0
新增的。此类提供一个与
StringBuffer
兼容的
API
,但不保证同步。该类被设计用作
StringBuffer
的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比
StringBuffer
要快。两者的方法基本相同。
何时用
StringBuffer
、
StringBuilder:
StringBuilder
一般使用在方法内部来完成类似
"+"
功能
,
因为是线程不安全的
,
所以用完以后可以丢弃
.StringBuffer
要用在全局变量中
分享到:
相关推荐
在Java编程语言中,String、StringBuilder和StringBuffer都是用来处理字符串的类,它们之间存在一些重要的区别,主要涉及到性能和线程安全性。 首先,`String`类代表的是字符串常量,一旦创建,其内容就不能改变。...
"String StringBuffer和StringBuilder区别之源码解析" 在Java中,字符串是我们经常使用的数据类型,而String、StringBuffer和StringBuilder是Java中三种常用的字符串类。在这篇文章中,我们将从源码角度对String、...
stringbuilder用法 String、StringBuilder、StringBuffer 用法比较String、StringBuilder、StringBuffer 用法比较String、StringBuilder、StringBuffer 用法比较String、StringBuilder、StringBuffer 用法比较String...
String、StringBuilder、StringBuffer的区别 在 Java 中,String、StringBuilder 和 StringBuffer 三者都是字符串处理类,但是它们之间存在着本质的区别。本文将从执行速度、线程安全性、字符串处理方式等方面对这...
在Java编程语言中,`String`、`...理解`String`、`StringBuffer`和`StringBuilder`的区别和使用场合,可以帮助开发者写出更高效、更安全的代码。在实际开发中,应根据项目需求和环境选择合适的字符串处理类。
String, StringBuffer 与 StringBuilder 的区别 在 Java 中,String, StringBuffer 和 StringBuilder 三个类都是用于字符操作的,但它们之间有着很大的区别。 首先,String 是不可变类,意味着一旦创建了 String ...
StringBuffer:字符创变量 StringBuilder:字符创变量 从上面的名字可以看到,String是“字符创常量”,也就是不可改变的对象。对于这句话的理解你可能会产生这样一个疑问 ,比如这段代码:
String,StringBuilder,StringBuffer
在Java编程语言中,String、StringBuilder和StringBuffer都是用来处理字符串的重要类,它们各有特点,适用于不同的场景。这里我们将深入探讨这三个类的区别、特性和使用策略。 首先,String类是不可变的,这意味着...
String、StringBuffer 和 StringBuilder 是 Java 语言中三种不同类型的字符串处理方式,它们之间存在着明显的性能和线程安全性差异。 String String 类型是不可变的对象,每次对 String 对象进行改变时都会生成一...
javase部分String的相关基础知识,String的构造方法总结比较以及各自的应用场景(代码举例),常用的容器类StringBuilder和StringBuffer的关系比较(图示)以及两者的区别联系和具体哪中场景下用哪个类。
在Java编程语言中,`String`、`StringBuilder`和`StringBuffer`是处理字符串的三种主要类型,它们各自具有不同的特性和使用场景。下面将详细解释它们之间的主要区别。 首先,`String`类是最基本的字符串类型,它...
在Java编程语言中,String、StringBuffer和StringBuilder都是用来处理字符串的重要类,它们各自具有不同的特性和使用场景。下面将详细解析这三个类的区别。 首先,`String`类是最基础的字符串处理类,它被设计为不...
`StringBuilder`是`JDK 5.0`引入的新类,它是`StringBuffer`的一个轻量级替代品,主要区别在于`StringBuilder`不是线程安全的。这意味着在单线程环境下,`StringBuilder`的操作速度通常会比`StringBuffer`更快,因为...
Java中的`String`、`StringBuilder`和`StringBuffer`都是用来处理字符串的类,它们各自有不同的特性和适用场景。在理解它们之间的区别之前,我们首先要知道它们的共同点。 **共同点:** 1. **都是字符串类**:这三...
string,stringbuffer,stringbuilder
Java中的String、StringBuilder和StringBuffer类都是用于处理字符串的,但在不同的场景下,它们各有优缺点。本篇文章将深入分析这三个类的区别。 首先,我们来看它们的值可变性。String类是不可变的,这意味着一旦...