String、StringBuffer和StringBuilder的异同点

简介: 三者都是引用类型,都是对字符串进行操作的类。

String、StringBuffer和StringBuilder的区别

概述

三者都是引用类型,都是对字符串进行操作的类。

不同点:

1 值是否可变

String类是被final修饰的,其底层是字符数组,类不可被继承,值从开始创建到销毁也不可变,若要改变只能通过引用改变达到值改变的效果;StringBuffer和StringBuilder是AbstractStringBuilder的子类,AbstractStringBuilder类底层也是使用字符数组存储字符串,但其没有被final修饰,所以其可继承,StringBuilder和StringBuffer对象的值可以通过append()、insert()、reverse()等方法实现对值的改变。

2 对象创建

String可以通过字符串拼接或者new String() 一个对象,前者回先判断字符串常量池中是否有该值,有的话直接引用,没的话在字符串常量池中创建一个,而后者则是会在堆内存中新建一个对象,与此同时,若是字符串常量池中没有相同字符串,也会在常量池中新建一个;StringBuffer和StringBuilder则是AbstractStringBuilder的子类,直接通过new在堆内存中创建对象。

StringBuilder和StringBuffer可通过toString()方法将对象转换为String对象。

3 线程安全性

String相当于常量,其线程是安全的;StringBuffer实现了synchronized封装,也是线程安全的;而StringBuilder是线程不安全的。

4 效率

StringBuilder未考虑锁的开销,只要不出现频繁创建StringBuilder对象的情况,其效率是很快的;StringBuffer考虑了同步锁,其线程安全,但是比StringBuilder效率略低;所以效率上:StringBuilder>StringBuffer>String。

5 使用场景

StringBuilder线程不安全但是效率高,所以在单线程操作下使用更好;由于StringBuilder在相同情况西效率仅比StringBuffer高了10%~15%左右,但在多线程的情况下却带来了线程不安全的风险,所以在多线程并发下更多地使用StringBuffer。
相关文章
|
3月前
|
安全
String、StringBuffer、StringBuilder的区别
String 由 char[] 数组构成,使用了 final 修饰,对 String 进行改变时每次都会新生成一个 String 对象,然后把指针指向新的引用对象。 StringBuffer可变并且线程安全;有一定缓冲区容量,字符串大小没超过容量,不会重新分配新的容量,适合多线程操作字符串; StringBuiler可变并且线程不安全。速度比StringBuffer更快,适合单线程操作字符串。 操作少量字符数据用 String;单线程操作大量数据用 StringBuilder;多线程操作大量数据用 StringBuffer
|
5月前
|
安全 Java
String、StringBuffer、StringBuilder的区别
这篇文章讨论了Java中String、StringBuffer和StringBuilder的区别。String是不可变的,每次操作都会产生新的对象,效率低且浪费内存。StringBuilder可以在原字符串基础上进行操作,不开辟额外内存,弥补了String的缺陷。StringBuffer和StringBuilder类似,但StringBuffer的方法是线程安全的。文章还列举了StringBuffer的常用方法,并提供了使用示例代码。最后总结了这三者的主要区别。
String、StringBuffer、StringBuilder的区别
|
4月前
|
canal 安全 索引
(StringBuffer和StringBuilder)以及回文串,字符串经典习题
(StringBuffer和StringBuilder)以及回文串,字符串经典习题
52 5
|
4月前
|
存储 安全 Java
String、StringBuffer 和 StringBuilder 的区别
【10月更文挑战第21天】String、StringBuffer 和 StringBuilder 都有各自的特点和适用场景。了解它们之间的区别,可以帮助我们在编程中更合理地选择和使用这些类,从而提高程序的性能和质量。还可以结合具体的代码示例和实际应用场景,进一步深入分析它们的性能差异和使用技巧,使对它们的理解更加全面和深入。
85 0
|
5月前
|
Java 索引
java基础(13)String类
本文介绍了Java中String类的多种操作方法,包括字符串拼接、获取长度、去除空格、替换、截取、分割、比较和查找字符等。
57 0
java基础(13)String类
|
3月前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
84 2
|
4月前
|
Java
【编程基础知识】(讲解+示例实战)方法参数的传递机制(值传递及地址传递)以及String类的对象的不可变性
本文深入探讨了Java中方法参数的传递机制,包括值传递和引用传递的区别,以及String类对象的不可变性。通过详细讲解和示例代码,帮助读者理解参数传递的内部原理,并掌握在实际编程中正确处理参数传递的方法。关键词:Java, 方法参数传递, 值传递, 引用传递, String不可变性。
83 1
【编程基础知识】(讲解+示例实战)方法参数的传递机制(值传递及地址传递)以及String类的对象的不可变性
|
4月前
|
安全 Java 测试技术
Java零基础-StringBuffer 类详解
【10月更文挑战第9天】Java零基础教学篇,手把手实践教学!
91 2
|
5月前
|
安全 Java
String类-知识回顾①
这篇文章回顾了Java中String类的相关知识点,包括`==`操作符和`equals()`方法的区别、String类对象的不可变性及其好处、String常量池的概念,以及String对象的加法操作。文章通过代码示例详细解释了这些概念,并探讨了使用String常量池时的一些行为。
String类-知识回顾①
|
4月前
|
存储 安全 C++
【C++打怪之路Lv8】-- string类
【C++打怪之路Lv8】-- string类
41 1