1.三者在执行速度方面的比较:StringBuilder > StringBuffer > String
2.String <(StringBuffer,StringBuilder)的原因
String:字符串常量
StringBuffer:字符创变量
StringBuilder:字符创变量
从上面的名字可以看到,String是“字符创常量”,也就是不可改变的对象。对于这句话的理解你可能会产生这样一个疑问 ,比如这段代码:
2 s = s+1;
3 System.out.print(s);// result : abcd1
我们明明就是改变了String型的变量s的,为什么说是没有改变呢? 其实这是一种欺骗,JVM是这样解析这段代码的:首先创建对象s,赋予一个abcd,然后再创建一个新的对象s用来 执行第二行代码,也就是说我们之前对象s并没有变化,所以我们说String类型是不可改变的对象了,由于这种机制,每当用String操作字符串时,实际上是在不断的创建新的对象,而原来的对象就会变为垃圾被GC回收掉,可想而知这样执行效率会有多底。
而StringBuffer与StringBuilder就不一样了,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,这样就不会像String一样创建一些而外的对象进行操作了,当然速度就快了。
3.一个特殊的例子:
3 StringBuffer builder = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);
你会很惊讶的发现,生成str对象的速度简直太快了,而这个时候StringBuffer居然速度上根本一点都不占优势。其实这是JVM的一个把戏,实际上:
String str = “This is only a” + “ simple” + “test”;
其实就是:
String str = “This is only a simple test”;
所以不需要太多的时间了。但大家这里要注意的是,如果你的字符串是来自另外的String对象的话,速度就没那么快了,譬如:
String str2 = “This is only a”;
String str3 = “ simple”;
String str4 = “ test”;
String str1 = str2 +str3 + str4;
这时候JVM会规规矩矩的按照原来的方式去做。
4.StringBuilder与 StringBuffer
StringBuilder:线程非安全的
StringBuffer:线程安全的
当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。
对于三者使用的总结: 1.如果要操作少量的数据用 = String
2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer
相关推荐
理解这三个类的区别对于任何Java开发者,无论是初学者还是经验丰富的程序员,都是非常重要的。以下是对这三个类的详细解释: 1. **String类**: - **不可变性**:String类的对象一旦创建就不可改变。这意味着当你...
在 Java 中,String、StringBuilder 和 StringBuffer 三者都是字符串处理类,但是它们之间存在着本质的区别。本文将从执行速度、线程安全性、字符串处理方式等方面对这三者进行比较和分析。 首先,从执行速度方面来...
这三者之间的选择主要取决于具体的应用场景。如果字符串操作是在多线程环境下,那么`StringBuffer`是更好的选择,以确保线程安全;而在单线程环境中,为了追求更高的性能,`StringBuilder`应当优先考虑。同时,如果...
总结一下,三者在运行时间上的效率排序大致为:`String` > `StringBuffer` > `StringBuilder`。如果你在单线程环境中处理字符串,推荐使用`StringBuilder`,因为它既高效又灵活。而在多线程环境中,为了保证线程安全...
本文将详细介绍这三者的区别、用法及各自的优缺点。 String String 是 Java 中最基本的字符串类,位于 java.lang 包。它是一个被 final 关键字修饰的类,表示字符串类型。String 类型的特点是不可变的,即一旦创建...
1. **都是字符串类**:这三者都是Java中用于处理文本的类,其中`String`是最基础的字符串类,而`StringBuilder`和`StringBuffer`则是`String`的可变版本。 2. **基于数组存储**:它们内部都是用字符数组来存储字符串...
4. **三者的主要区别**: - **线程安全性**:String是不可变的,线程安全;StringBuffer是线程安全的,适合多线程环境;StringBuilder是线程不安全的,适合单线程环境。 - **性能**:在多线程环境下,StringBuffer...
Java中的String、StringBuffer和StringBuilder类都是用于处理字符串的,但它们之间存在显著的区别和应用场景。下面将详细解析这三个类的关系及其特点。 1. **String类** - String类是不可变的,这意味着一旦创建了...
- **知识点**:解释`StringBuffer`类是什么,它与`String`类之间的区别,以及何时应该使用`StringBuffer`而不是`String`。 - **例题**:选择题可能会考察对`StringBuffer`的理解,比如“以下哪个类支持可变长度的...
### JavaSE之StringBuilder类与String类 ...以上内容详细介绍了如何使用`String`和`StringBuilder`类,以及它们之间的区别。这对于JavaSE入门者来说是非常实用的知识点,希望这些知识点能够帮助到正在学习JavaSE的你。
因此,在单线程环境下使用`StringBuilder`通常比使用`StringBuffer`更快,因为后者为多线程环境添加了额外的开销。 #### 二、主要特点 1. **可变性**:`StringBuilder`对象允许在其上执行各种修改操作,如添加、...
9.StringBuffer和StringBuilder的区别?(实际面试题) 1.在执行速度方面的比较:StringBuilder 快于 StringBuffer 2. StringBuffer与StringBuilder,他们是字符串变量,是可改变的对象,每当我们用它们对字符...
此外,`String`对象经常与`StringBuilder`或`StringBuffer`一起使用,后者在多线程环境下进行字符串拼接时更为高效。 接下来,我们讨论`Vector`类。`Vector`是Java集合框架的一部分,它是动态数组的实现,可以自动...
根据不同的应用场景和需求,Java提供了多种处理字符串的方式,其中最为常见且重要的三种方式分别为:`String`(字符串常量)、`StringBuffer`(线程安全的字符串变量)以及`StringBuilder`(非线程安全的字符串变量...
本文总结了 Java 面试中的重要知识点,涵盖了基本数据类型、抽象类和接口、方法重载和重写、String、StringBuffer 和 StringBuilder 三者的区别、判断字符串是否为空、集合的理解等方面。 1. 基本数据类型 Java 中...
在Java编程语言中,字符串处理是一项非常常见的任务。在Java中,有三种主要的类用于创建和操作字符串:`String`, `StringBuilder...在实际开发中,熟练掌握这三者之间的区别和用法,能够有效地提升代码质量并优化性能。
使用`+`运算符或者`StringBuilder`/`StringBuffer`(线程安全)类来拼接字符串。对于大量拼接操作,推荐使用后两者以提高性能。 **五、转换方法** 1. `toUpperCase()` 和 `toLowerCase()`: 转换为大写或小写。 2. `...
String、StringBuffer、StringBuilder三者的区别: 都在java.lang 包下 String使用final修饰,不可变,每次字符串变更都是创建新的字符串,String s = “a”+"b"除外,频繁变更会导致无引用对象过多,导致gc影响性能...
虽然`StringBuffer`具有线程安全性,但在单线程环境中使用`StringBuilder`通常会更快,因为后者没有同步开销。因此,在多线程环境下使用`StringBuffer`,而在单线程环境下优先考虑`StringBuilder`。 #### 六、...