String,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开发者,无论是初学者还是经验丰富的程序员,都是非常重要的。以下是对这三个类的详细解释: 1. **String类**: - **不可变性**:String类的对象一旦创建就不可改变。这意味着当你...
在 Java 中,String、StringBuilder 和 StringBuffer 三者都是字符串处理类,但是它们之间存在着本质的区别。本文将从执行速度、线程安全性、字符串处理方式等方面对这三者进行比较和分析。 首先,从执行速度方面来...
这三者之间的选择主要取决于具体的应用场景。如果字符串操作是在多线程环境下,那么`StringBuffer`是更好的选择,以确保线程安全;而在单线程环境中,为了追求更高的性能,`StringBuilder`应当优先考虑。同时,如果...
Java 中 String、StringBuffer 和 StringBuilder 是三个常用的字符串操作类,了解它们之间的区别对 Java 开发者来说非常重要。本文将详细介绍这三者的区别、用法及各自的优缺点。 String String 是 Java 中最基本...
总结一下,三者在运行时间上的效率排序大致为:`String` > `StringBuffer` > `StringBuilder`。如果你在单线程环境中处理字符串,推荐使用`StringBuilder`,因为它既高效又灵活。而在多线程环境中,为了保证线程安全...
1. **都是字符串类**:这三者都是Java中用于处理文本的类,其中`String`是最基础的字符串类,而`StringBuilder`和`StringBuffer`则是`String`的可变版本。 2. **基于数组存储**:它们内部都是用字符数组来存储字符串...
Java中的String、StringBuffer和StringBuilder类都是用于处理字符串的,但它们之间存在显著的区别和应用场景。下面将详细解析这三个类的关系及其特点。 1. **String类** - String类是不可变的,这意味着一旦创建了...
4. **三者的主要区别**: - **线程安全性**:String是不可变的,线程安全;StringBuffer是线程安全的,适合多线程环境;StringBuilder是线程不安全的,适合单线程环境。 - **性能**:在多线程环境下,StringBuffer...
- **知识点**:解释`StringBuffer`类是什么,它与`String`类之间的区别,以及何时应该使用`StringBuffer`而不是`String`。 - **例题**:选择题可能会考察对`StringBuffer`的理解,比如“以下哪个类支持可变长度的...
### JavaSE之StringBuilder类与String类 ...以上内容详细介绍了如何使用`String`和`StringBuilder`类,以及它们之间的区别。这对于JavaSE入门者来说是非常实用的知识点,希望这些知识点能够帮助到正在学习JavaSE的你。
尽管`StringBuilder`和`StringBuffer`都提供了相似的方法来操作字符串,但两者之间存在以下关键区别: 1. **线程安全性**:`StringBuffer`的所有方法都是同步的,这意味着它在多线程环境中是线程安全的。而`...
9.StringBuffer和StringBuilder的区别?(实际面试题) 1.在执行速度方面的比较:StringBuilder 快于 StringBuffer 2. StringBuffer与StringBuilder,他们是字符串变量,是可改变的对象,每当我们用它们对字符...
此外,`String`对象经常与`StringBuilder`或`StringBuffer`一起使用,后者在多线程环境下进行字符串拼接时更为高效。 接下来,我们讨论`Vector`类。`Vector`是Java集合框架的一部分,它是动态数组的实现,可以自动...
根据不同的应用场景和需求,Java提供了多种处理字符串的方式,其中最为常见且重要的三种方式分别为:`String`(字符串常量)、`StringBuffer`(线程安全的字符串变量)以及`StringBuilder`(非线程安全的字符串变量...
在Java编程语言中,字符串处理是一项非常常见的任务。在Java中,有三种主要的类用于创建和操作字符串:`String`, `StringBuilder...在实际开发中,熟练掌握这三者之间的区别和用法,能够有效地提升代码质量并优化性能。
本文总结了 Java 面试中的重要知识点,涵盖了基本数据类型、抽象类和接口、方法重载和重写、String、StringBuffer 和 StringBuilder 三者的区别、判断字符串是否为空、集合的理解等方面。 1. 基本数据类型 Java 中...
使用`+`运算符或者`StringBuilder`/`StringBuffer`(线程安全)类来拼接字符串。对于大量拼接操作,推荐使用后两者以提高性能。 **五、转换方法** 1. `toUpperCase()` 和 `toLowerCase()`: 转换为大写或小写。 2. `...
虽然`StringBuffer`具有线程安全性,但在单线程环境中使用`StringBuilder`通常会更快,因为后者没有同步开销。因此,在多线程环境下使用`StringBuffer`,而在单线程环境下优先考虑`StringBuilder`。 #### 六、...
String、StringBuffer、StringBuilder三者的区别: 都在java.lang 包下 String使用final修饰,不可变,每次字符串变更都是创建新的字符串,String s = “a”+"b"除外,频繁变更会导致无引用对象过多,导致gc影响性能...