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。
相关文章
|
5天前
|
安全 Java 索引
Java StringBuffer 和 StringBuilder 类
Java StringBuffer 和 StringBuilder 类
|
6天前
|
安全 Java
Java StringBuffer和StringBuilder类
Java StringBuffer和StringBuilder类
13 0
|
9天前
|
存储 缓存 安全
String、StringBuffer和StringBuilder的区别(面试题)
String、StringBuffer和StringBuilder的区别(面试题)
37 0
|
12天前
|
安全 Java
字符串相关类StringBuffer和StringBuilder
字符串相关类StringBuffer和StringBuilder
14 0
|
16天前
|
Java 容器
Java可变字符串StringBuffer、StringBuilder
Java可变字符串StringBuffer、StringBuilder
17 0
|
23天前
|
存储 安全
毕业季高频面试题String,StringBuffer好和StringBuilder的区别
可能是因为毕业季,最近有非常多的应届生来咨询我面试相关的问题。这不,今天有一位应届生找到我,说面试被问到这样一道面试题:请谈谈String、StringBuffer和StringBuilder的区别。其实呢,这是一道老生常谈的题,光背八股文还是非常简单的。
14 0
|
1月前
StringBuffer类和StringBuilder类
StringBuffer类和StringBuilder类
15 0
|
1月前
|
存储 安全 Java
Java中 String,StringBuffer,StringBuilder之间的区别和常用方法总结
Java中 String,StringBuffer,StringBuilder之间的区别和常用方法总结
14 0
|
1月前
|
安全 Java
java学会这些,我就入门啦!(基础篇四)String、StringBuffer、StringBuilder的区别?
java学会这些,我就入门啦!(基础篇四)String、StringBuffer、StringBuilder的区别?
|
1月前
|
安全
可变字符串StringBuffer和StringBuilder
可变字符串StringBuffer和StringBuilder