在实际开发中,我们会经常使用到字符串连接的操作,以前我习惯喜欢用String的‘+’来操作,觉得非常方便好用,最近认真学习了String,StringBuffer和StringBuilder这三个类,才发现使用String来连接字符串,代码性能会很低。下面我们就字符串连接来分析这三种方式。
1.String
打开String的源码,如图所示
会发现存储字符串的字符数值是final常量。再看String的构造方法,发现String的value值在构造方法就确定了值。这里有必要说明下关键字final
final修饰的属性为常量(值不可改变),要么在声明的同时赋值,要么在构造方法里面进行赋值,一旦赋值就不能改变。
所以,用String来实现字符串拼接,由于String的值不可改变,所以每次拼接都要生成一个新的String来存储新的字符串。所以使用String来处理字符串拼接性能会很低。
更多String的信息,可以参考博客:http://longpo.iteye.com/blog/2199493
2.StringBuffer
StringBuffer类继承了抽象类 AbstractStringBuilder类,打开AbstractStringBuilder源码
再来StringBuffer看看重载的三个构造方法
发现都是调用父类AbstractStringBuilder的构造方法
发现StringBuffer的存储数据的char数组不是final类型的,说明可以变更,且构建出来的字符串都还有空余的位置来拼接字符串。
在StringBuffer中我们使用append()函数来进行字符串的拼接。我们可以想到虽然char数组还有剩余,但一直拼接肯定也不够用。所以有必要看看append函数的源码实现。
查看其父类AbstractStringBuilder的append方法
发现当value数组容量不够时,会创建一个新的value数组来存储字符串。到这里就应该明白了StringBuffer字符串拼接的原理啦。当char value数组不够时会创建个更大容量的数组来存储。效率明显比String高。
3.StringBuilder
StringBuilder和StringBuffer是两兄弟,用法基本一样,不同的是StringBuffer是同步的,线程安全的,而StringBuilder不保证同步,线程不安全。
StringBuilder在大多数实现中比StringBuffer快, 在字符串缓冲区被单个线程访问时,建议优先使用StringBuilder
相关推荐
"String StringBuffer和StringBuilder区别之源码解析" 在Java中,字符串是我们经常使用的数据类型,而String、StringBuffer和StringBuilder是Java中三种常用的字符串类。在这篇文章中,我们将从源码角度对String、...
String、StringBuffer 和 StringBuilder 是 Java 语言中三种不同类型的字符串处理方式,它们之间存在着明显的性能和线程安全性差异。 String String 类型是不可变的对象,每次对 String 对象进行改变时都会生成一...
StringBuffer:字符创变量 StringBuilder:字符创变量 从上面的名字可以看到,String是“字符创常量”,也就是不可改变的对象。对于这句话的理解你可能会产生这样一个疑问 ,比如这段代码:
在 Java 中,String, StringBuffer 和 StringBuilder 三个类都是用于字符操作的,但它们之间有着很大的区别。 首先,String 是不可变类,意味着一旦创建了 String 对象,就不能修改它的值。每次对 String 对象的...
在Java编程语言中,`String`、`...理解`String`、`StringBuffer`和`StringBuilder`的区别和使用场合,可以帮助开发者写出更高效、更安全的代码。在实际开发中,应根据项目需求和环境选择合适的字符串处理类。
在Java编程语言中,String、StringBuilder和StringBuffer都是用来处理字符串的类,它们之间存在一些重要的区别,主要涉及到性能和线程安全性。 首先,`String`类代表的是字符串常量,一旦创建,其内容就不能改变。...
在Java编程语言中,`String`、`StringBuffer`和`StringBuilder`都是用来处理字符串的类,但它们之间存在显著的差异,主要体现在性能、线程安全性和使用场景上。 首先,`String`是最基本的字符串类,它代表的是不可...
最后,让我们总结一下 Java 中 String, StringBuffer 与 StringBuilder 三种字符串类型的区别和用法。String 类型是不可变的对象,性能不好,适合不需要修改的字符串对象。StringBuffer 类型是可变的对象,性能好,...
在Java编程语言中,String、StringBuffer和StringBuilder都是用来处理字符串的重要类,它们各自具有不同的特性和使用场景。下面将详细解析这三个类的区别。 首先,`String`类是最基础的字符串处理类,它被设计为不...
string,stringbuffer,stringbuilder
在Java编程语言中,String、StringBuffer和StringBuilder都是用来处理字符串的重要类,它们各自有特定的使用场景和特性。理解这三个类的区别对于任何Java开发者,无论是初学者还是经验丰富的程序员,都是非常重要的...
string,stringBuffer,stringBuilder
在Java编程语言中,String、StringBuffer和StringBuilder都是用来处理字符串的对象,但它们之间存在显著的区别。String是最常见的字符串类型,它的特点是不可变性。这意味着一旦一个String对象被创建,就不能进行...
"Java 中 String、StringBuffer 和 StringBuilder 的区别及用法" Java 中 String、StringBuffer 和 StringBuilder 是三个常用的字符串操作类,了解它们之间的区别对 Java 开发者来说非常重要。本文将详细介绍这三者...
在Java编程语言中,String、StringBuffer和StringBuilder都是用来处理字符串的类,但它们之间存在显著的性能和功能差异。下面我们将深入探讨这三个类的区别。 首先,`String`类是Java中最基本的字符串类型,它表示...
BATJ面试题讲解-String、StringBuffer、StringBuilder的区别
Java面试题-每日一题:String、StringBuffer、StringBuilder的区别
在Java编程中,当我们需要对字符串进行多次修改时,StringBuffer和StringBuilder类成为首选。这两个类提供了一种高效且灵活的方式来处理字符串,与不可变的String类相比,它们能避免创建大量未使用的对象,从而提高...
Java 中 String 和 StringBuffer 与 StringBuilder 的区别及使用方法 Java 中 String、StringBuffer 和 StringBuilder 是三个常用的字符串操作类,每个类都有其特点和使用场景。在开发过程中,正确选择合适的字符串...