面试题:String,StringBuilder和StringBuffer的区别

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

面试题StringStringBuilder和StringBuffer的区别

一、String

1、String是一个长度不可变的字符序列底层是一个被final修饰的char[]数组。
在这里插入图片描述

2、任何对String类型进行改变的操作实际上都是重新生产一个新的String对象然后将指针指向新的String对象。
举例说明上代码
在这里插入图片描述

3、对于上段代码我们来分析一下子首先创建了String对象x同时开辟一空间存储字符串序列”hello”然后将对象x指向字符串序列”hello”的存储地址。然后需要再开辟另一空间存储字符串序列”java”再将两个字符串进行拼接并存储到另一个新开辟的存储空间中最后将对象x的地址指向拼接后的字符串对应的存储空间的地址整个过程完成。
4、我们不难发现这样一个简单的对String对象进行修改的操作需要开辟三次空间变更两次地址这样不仅效率低而且大量浪费有限的内存空间。因此如果你需要频繁的对字符串进行操作的话看样子String对象这时候就不太中用了。
5、基于上述的使用背景即如果你需要频繁的对字符串进行操作的话就需要使用到StringBuilder和StringBuffer了。

二、StringBuilder、StringBuffer

StringBuilder可变的字符序列 线程不安全的效率高底层是 char[]数组 存储。
StringBuffer可变的字符序列 线程安全的效率低底层是 char[]数组 存储。

StringBuilder和StringBuffer都是可变的字符串序列可以对其进行多次修改而不创建新的对象。两者的区别在于线程安全性StringBuffer是线程安全的而StringBuilder是非线程安全的。在多线程环境下使用StringBuffer可以保证线程安全但是会降低性能。在单线程环境下使用StringBuilder性能更高。

三、StringBuilder、StringBuffer对象创建及常用方法

1、对象创建
两个类创建的话直接new对象即可如果需要想创建指定字符串的对象那么带参即可。示例如下
在这里插入图片描述
在这里插入图片描述

2、常用方法
在这里插入图片描述

四、小结
String不可变长的字符串序列适用于少量的字符串操作的情况。
StringBuilder适用于在单线程环境下进行大量的字符串操作可以获得更好的性能。
StringBuffer适用于在多线程环境下进行大量的字符串操作可以保证线程安全但是会牺牲一定的性能。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6