毕业季高频面试题String,StringBuffer好和StringBuilder的区别

简介: 可能是因为毕业季,最近有非常多的应届生来咨询我面试相关的问题。这不,今天有一位应届生找到我,说面试被问到这样一道面试题:请谈谈String、StringBuffer和StringBuilder的区别。其实呢,这是一道老生常谈的题,光背八股文还是非常简单的。

可能是因为毕业季,最近有非常多的应届生来咨询我面试相关的问题。这不,今天有一位应届生找到我,说面试被问到这样一道面试题:请谈谈String、StringBuffer和StringBuilder的区别。其实呢,这是一道老生常谈的题,光背八股文还是非常简单的。


既然,大家有这方面的需求,今天我还是给大家分享一下我的理解。


关于String、StringBuffer、StringBuilder的区别,我从以下四个方面来理解:

1、值可变性方面

5df8f5c4cdcc7216b150551c2991a389.jpg

String内部的value值是final修饰的,所以它是不可变类。因此,每次修改String的值,都会产生一个新的对象。


而StringBuffer和StringBuilder是可变类,它们在字符串变更的时候,不会产生新的对象。

2、线程安全方面

554f072ba9fa40be996fb147b555c49d.jpg

String是不可变类,所以它是线程安全的。


StringBuffer是线程安全的,因为它每个操作方法都加了synchronized同步关键字。


而StringBuilder不是线程安全的。如果在多线程环境下对字符串进行操作,建议使用StringBuffer,单线程情况下,才建议使用StringBuilder。

3、性能方面

55e4fdc2fd613bdc50a3a5dcca3ba6e3.jpg

String的性能是最低的,因为它不可变,意味着在做字符串拼接和修改的时候,需要反复地重新创建新的对象和分配内存。


其次是StringBuffer,它要比String性能高,因为它的可变性使得字符串可以直接被修改。


性能最高的是StringBuilder,因为StringBuffer加了同步锁,而StringBuilder是无阻塞的。

4、数据存储方面

1b2569f1c64d0e193529161235735c65.jpg

String存储在字符串常量池中,而StringBuffer和StringBuilder存储在堆内存空间。


最后再补充一下, StringBuilder和StringBuffer都是派生自AbstractStringBuilder这个抽象类。


以上就是我对String、StringBuffer和StringBuilder的理解。


我是被编程耽误的文艺Tom,关注我,面试不再难!

b47a6e98314749488df58a0cfbc33b50.gif

相关文章
|
18天前
|
Java
面试官:你知道Comparable 和 Comparator 的区别吗?我:巴拉巴拉
面试官:你知道Comparable 和 Comparator 的区别吗?我:巴拉巴拉
22 1
|
18天前
|
Java
面试官:小伙子来说一说Java中final关键字,以及它和finally、finalize()有什么区别?
面试官:“小伙子,用过final关键字吗?” 我:“必须用过呀” 面试官:“好,那来说一说你对这个关键字的理解吧,再说一说它与finally、finalize()的区别” 我:“好嘞!
19 1
|
18天前
|
存储 安全 Java
面试官:请聊一聊String、StringBuilder、StringBuffer三者的区别
面试官:请聊一聊String、StringBuilder、StringBuffer三者的区别
39 8
|
1月前
|
存储 SQL NoSQL
面试题:char和varchar的区别?
字节面试题:char和varchar的区别?
28 0
|
1月前
|
Java API 索引
Java基础—笔记—String篇
本文介绍了Java中的`String`类、包的管理和API文档的使用。包用于分类管理Java程序,同包下类无需导包,不同包需导入。使用API时,可按类名搜索、查看包、介绍、构造器和方法。方法命名能暗示其功能,注意参数和返回值。`String`创建有两种方式:双引号创建(常量池,共享)和构造器`new`(每次新建对象)。此外,列举了`String`的常用方法,如`length()`、`charAt()`、`equals()`、`substring()`等。
16 0
|
1月前
|
缓存 Java
Java中循环创建String对象的内存管理分析
Java中循环创建String对象的内存管理分析
25 2
|
3天前
|
安全 Java 编译器
Java中String、StringBuilder和StringBuffer的区别
Java中String、StringBuilder和StringBuffer的区别
|
6天前
|
存储 缓存 安全
【 Java中String源码分析(JVM视角你不来看看?】
【 Java中String源码分析(JVM视角你不来看看?】
12 0
|
12天前
|
Java
Java String类型转换成Date日期类型
Java String类型转换成Date日期类型
|
12天前
|
Java 索引
Java String应用与开发
Java String应用与开发
22 0