String Class - StringBuffer 和 StringBuilder - Java -这波小细小细

前言

StringBuffer 、 StringBuilder、 String 是三种数据类型
首先来回顾下String类的特点:
任何的字符串常量都是String对象,而且String的常量一旦声明不可改变,如果改变对象内容,改变的是其引用的指
向而已。
通常来讲String的操作比较简单,但是由于String的不可更改特性,为了方便字符串的修改,提供StringBuffer和
StringBuilder类。

再来说 StringBuffer 和 StringBuilder ,从内部的方法上来说:大同小异,基本一致。


StringBuilder

我们先直接new 个 StringBuilder,看个效果

在这里插入图片描述


既然发现直接使用,没有现象,那么我们就来传参。

第一种 直接传参

在这里插入图片描述


疑问由此而生,sb 是一个引用,存储的地址,那么它怎么 就可以打印"abcdef"呢?
这是因为 sout(System.out,println) 调用的是 sb 引用类型的 toString。
那么我们 Ctrl+左键,进入 StringBuilder 类型中
在这里插入图片描述
那么我们就可以这么去写,因为它的返回值本身就是 String
在这里插入图片描述


第二种,通过append方法去添加

在这里插入图片描述

附图

在这里插入图片描述


#ensp;

这是我们再 append 一个字符串时,会发生怎么的效果

在这里插入图片描述


append 可以连用。

语法: append().append();在这里插入图片描述


拓展

回顾前面在讲 字符串常量池的时候,有两个字符串拼接,拼接好的字符串引用类型就是StringBuilder类型。不入池。

代码示例(模仿当时情景):

public class Test {
    
    
    public static void main(String[] args) {
    
    
        String str = "abcdef";
        str+="123";
        System.out.println(str);
    }
}
效果图

在这里插入图片描述

附图

在这里插入图片描述
由此得出局部结论:在循环拼接字符串的时候,使用 StringBuilder / StringBuffer ,效率要比String更高。(最后我们在对其优化一波)
在这里插入图片描述


虽然我们前面说: StringBuilder 和 StringBuffer 几乎一样,但 是 几乎,而不是完全,所以还是会存在着些许不同的地方,接下来,我们就来讲一下 StringBuilder 和 StringBuffer的区别。

在这里插入图片描述
由此得知,StringBuilder 和 StringBuffer 的功能都差不多,大部分功能都相同,
但是 有些功能,虽然名称是一样的,但是功能上的实现,却存在着细微的区别。
比如:append
在这里插入图片描述


小知识点:

把字符串转变成StringBuilder类型/StringBuffer类型,必须调用对应的构造方法

在这里插入图片描述


StringBuilder类型/StringBuffer类型 转变成 String类型,调用 toString 方法

在这里插入图片描述


文章的最后,以面试的问题结束

面试题:请解释String、StringBuffer、StringBuilder的区别

String 的内容不可修改,StringBuffer 与 StringBuilder的内容可以修改
StringBuffer 与 StringBuilder 大部分功能是相似的
StringBuffer 采用同步处理(synchronized),属于线程安全操作;而 StringBuilder 未采用同步处理(synchronized),属于线程不安全操作

猜你喜欢

转载自blog.csdn.net/DarkAndGrey/article/details/121546230