1. 为什么要用StringBuffer和StringBuilder?
String c = "aaa" +"bbb"与sb.append("aaa").append("bbb")有什么区别,类似这样的问题大家应该都很熟悉,它经常出现在面试题,我想答案大家都已经很清楚,用+会创建多个String,因为String是存放在常量池中的,而且是不可以变的,"aaa"变不成"aaabbb"。反过来问一下,都思考过StringBuffer或者StringBuilder到底怎么实现的?StringBuffer底层数据结构又是怎样的呢?带着这一番问题查看了StringBuffer的源码?
StringBuffer和StringBuilder都是继承于AbstractStringBuilder,底层的逻辑都包含在这个类中。C中是没有字符串用char[]数组来实现字符串。StringBuffer底层也是char[],数组初始化的时候就定下了大小,如果不断的append肯定有超过数组大小的时候,我们是不是定义一个超大容量的数组,太浪费空间了。就像ArrayList的实现,采用动态扩展,每次append首先检查容量,容量不够就先扩展,然后复制原数组的内容到扩展以后的数组中,就这么简单,别无其他。
public AbstractStringBuilder append(String str) {
if (str == null) str = "null";
int len = str.length();
ensureCapacityInternal(count + len);//查看使用空间满足,不满足扩展空间
str.getChars(0, len, value, count);//getChars就是利用native的array copy,性能高效
count += len;
return this;
}
2. StringBuffer和StringBuilder区别?
StringBuffer的操作加上synchronized,而StringBuilder没有高效,如果我们在方法中声明并使用,就是局部变量,不会逃逸出这个方法体使用StringBuilder高效高一些。StringBuffer更适合并发访问的场景
3.如何高效的使用StringBuffer和StringBuilder?
如大概知道String的大小,尽量使用public StringBuffer(int capacity)指定容量,避免更少的动态扩展
分享到:
相关推荐
在StringBuilder类的源码中,我们可以看到,它的扩容机制与StringBuffer类相同,也是以16为单位进行扩容的。 String、StringBuffer和StringBuilder的比较 通过上面的分析,我们可以看到,String类的字符串是不可变...
String, StringBuffer 与 StringBuilder 的区别 在 Java 中,String, StringBuffer 和 StringBuilder 三个类都是用于字符操作的,但它们之间有着很大的区别。 首先,String 是不可变类,意味着一旦创建了 String ...
StringBuffer:字符创变量 StringBuilder:字符创变量 从上面的名字可以看到,String是“字符创常量”,也就是不可改变的对象。对于这句话的理解你可能会产生这样一个疑问 ,比如这段代码:
Java 中 String, StringBuffer 与 StringBuilder 的区别 Java 中 String, StringBuffer 与 StringBuilder 三种字符串类型的区别是很多开发者经常混淆或不了解的知识点。今天,我们将深入探讨这三种字符串类型的区别...
在Java编程语言中,`String`、`StringBuffer`和`StringBuilder`是处理字符串的三个重要类,它们各自有特定的使用场景和优缺点。理解它们的差异对于编写高效的代码至关重要。 **String类** `String`是不可变的类,...
StringBuilder 类型是可变的对象,提供了与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候。StringBuilder 在大多数实现中比 ...
在Java编程语言中,`String`、`StringBuffer`和`StringBuilder`都是用来处理字符串的类,但它们之间存在显著的差异,主要体现在性能、线程安全性和使用场景上。 首先,`String`是最基本的字符串类,它代表的是不可...
string,stringbuffer,stringbuilder
StringBuffer & StringBuilder 源码分析 StringBuffer 和 StringBuilder 是 Java 语言中两个常用的字符串操作类,它们都是 CharSequence 接口的实现类,并且都继承了 AbstractStringBuilder 类。下面是对这两个类的...
《Java中的StringBuffer与StringBuilder类详解》 在Java编程中,当我们需要对字符串进行多次修改时,StringBuffer和StringBuilder类成为首选。这两个类提供了一种高效且灵活的方式来处理字符串,与不可变的String类...
在Java编程语言中,String、StringBuffer和StringBuilder都是用来处理字符串的重要类,它们各自具有不同的特性和使用场景。下面将详细解析这三个类的区别。 首先,`String`类是最基础的字符串处理类,它被设计为不...
string,stringBuffer,stringBuilder
与 `StringBuffer` 类似,`StringBuilder` 的用法也包括 `append()`、`insert()`、`deleteCharAt()` 和 `reverse()` 方法。 **四、为什么StringBuffer和StringBuilder更适合在循环中使用?** 因为 `String` 对象是...
在Java编程语言中,String、StringBuilder和StringBuffer都是用来处理字符串的类,它们之间存在一些重要的区别,主要涉及到性能和线程安全性。 首先,`String`类代表的是字符串常量,一旦创建,其内容就不能改变。...
#### 二、StringBuffer与StringBuilder的对比 ##### 1. 定义与结构 - **StringBuffer** 和 **StringBuilder** 都是`java.lang`包下的公共类(`public class`),它们都继承自`AbstractStringBuilder`,并实现了`java...
- **可变性与效率**:StringBuilder与StringBuffer类似,也是可变的,允许直接修改对象。但是,StringBuilder没有实现线程安全,这意味着它不包含同步方法,因此在单线程环境中,StringBuilder通常比StringBuffer更...
在Java编程语言中,StringBuffer和StringBuilder类是处理可变字符串序列的重要工具。它们提供了丰富的功能,如添加、插入、删除、替换字符,以及反转字符串序列等。由于这两个类的特性,它们在处理大量字符串操作时...
JAVA面试题,从源码角度分析StringBuffer和StringBuilder的区别 在本文中,我们将从源码角度分析StringBuffer和StringBuilder的区别,这两个类都是Java中常用的字符串操作类,但是它们之间有什么区别呢?下面我们来...