Java StringBuilder

J a v a   S t r i n g B u i l d e r \huge{Java \space StringBuilder} Java StringBuilder

概述

S t r i n g B u i l d e r StringBuilder StringBuilder类是一种特殊的可变字符串的操作类,可以把它看做成一种特殊的对象容器。(简单讲的话就是一种特殊的字符串类型)

为什么要使用它?

既然 S t r i n g B u i l d e r StringBuilder StringBuilder类型是一种字符串类型,那么为什么不直接使用 S t r i n g String String类型呢?为什么还要这么麻烦呢?

因为字符串的操作使用 S t r i n g B u i l d e r StringBuilder StringBuilder类型为基础进行操作的话,效率疯狂提高❗❗
(具体怎么提高见后面的内存原理图)

如何使用它?

①. 构造器

在这里插入图片描述
示例:

StringBuilder sb = new StringBuilder();
//创建了一个StringBuilder里面不包含任何内容

或者构造器传入参数字符串 S t r i n g String String就可以进行特殊的初始化。

②. 常用方法

1. append()方法

a p p e n d ( ) append() append():在字符串后面添加数据并返回 S t r i n g B u i l d e r StringBuilder StringBuilder对象本身。(这点很重要,有关于后面的链式编程使用)

示例:

		//向空的StringBuilder对象sb中添加数据然后打印
        StringBuilder sb = new StringBuilder(); // ""
        sb.append("a");
        sb.append("b");
        sb.append("c");
        sb.append(1);
        sb.append(false);
        sb.append(3.3);
        sb.append("abc");
		//重写了toString()方法
        System.out.println(sb);

运行结果:
在这里插入图片描述
S t r i n g B u i l d e r StringBuilder StringBuilder a p p e n d ( ) append() append()还是很厉害的,代码中的多种数据类型都连接成 S t r i n g B u i l d e r StringBuilder StringBuilder类型了。
❗❗而且可以知道 S t r i n g B u i l d e r StringBuilder StringBuilder类型中的 t o S t r i n g ( ) toString() toString()方法也重写了。

a p p e n d ( ) append() append()也支持链式编程
示例:

StringBuilder sb1 = new StringBuilder();
// 支持链式编程
sb1.append("a").append("b").append("c").append("我爱你中国");
System.out.println(sb1);

为什么支持链式编程?
就像前面说的, a p p e n d ( ) append() append()方法会返回一个 S t r i n g B u i l d e r StringBuilder StringBuilder对象:
在这里插入图片描述
返回这个对象之后,继续.append(),进行添加,添加完之后继续.append()…,这就完成了链式编程。

2. reverse()方法

r e v e r s e ( ) reverse() reverse():反转 S t r i n g B u i l d e r ( ) StringBuilder() StringBuilder()类型中的数据。
在这里插入图片描述
并且返回这个对象!!(链式编程警觉!!)

3. length()方法

l e n g t h ( ) length() length():返回对象内容的长度。
在这里插入图片描述

❗❗❗❗4. toString()方法

t o S t r i n g ( ) toString() toString() S t r i n g B u i l d e r StringBuilder StringBuilder类型转换为 S t r i n g String String类型。(非常重要!!)

**背景:**因为在实际的开发中,所有的方法参数基本都是使用 S t r i n g String String类型的,比方说:

public static String fun(String str){
	...
}

这个方法的入参就是 S t r i n g String String类型,并且出参也是 S t r i n g String String类型,这个时候传入一个 S t r i n g B u i l d e r StringBuilder StringBuilder类型就会显得非常的奇怪。所以在实际的情况中, S t r i n g String String类型用交流的媒介, S t r i n g B u i l d e r StringBuilder StringBuilder类型用于当想要操作 S t r i n g String String类型时,进行操作的一个操作空间。

💥💥💥简而言之:所有的 S t r i n g B u i l e r StringBuiler StringBuiler类型进行增删改查操作的时候直接操作就好了,但是进行传参等操作的时候,必须转换成 S t r i n g String String类型!

示例:

		//整体的思想就是字符串操作就使用StringBuilder在这个空间中进行操作
		//但是传入方法的时候就换为String进行传参

        StringBuilder sb2 = new StringBuilder();
        sb2.append("123").append("456");
        // 恢复成String类型
        String rs = sb2.toString();
        check(rs);
	
		//入参为String类型的check方法
		public static void check(String data){
        	System.out.println(data);
    	}

内存原理

那么为什么需要大费周章的放到 S t r i n g B u i l d e r StringBuilder StringBuilder类型这个空间中进行操作呢?
因为节省资源!!
首先先说明 S t r i n g String String类型的+的底层逻辑:

public class Test{
	public static void main(String[] args) {
		String s1 = "a";
		String s2 = s1 + "b";
		String s3 = s2 + "c";
	}
}

上面这段代码最后表现出的结果就是s3 = "abc"但是内部的运行逻辑实际非常的复杂并且繁琐。
首先将方法载入到栈内存中:
在这里插入图片描述
首先现在字符串常量池中放入a,并且让s1指向a。完成了s1的赋值。之后读取到s2,首先会生成一个StringBuilder对象在堆内存中,然后进行加操作得到ab,之后在堆内存中生成一个String类型的数据,然后使用StringBuildertoString方法,将ab赋值给堆中的String,最后s2进行指向该Strings3同理。
堆中情况:
在这里插入图片描述
一句话:明面调用一次+,在内存中会产生两个对象,本质的原因是String类型直接进行操作在底层也还是转换为StringBuilder进行操作。(浪费内存空间

所以索性直接使用StringBuilder,在堆内存中产生一个对应的StringBuilder对象进行操作也就完啦!!

总结

S t r i n g B u i l d e r StringBuilder StringBuilder:可以理解为特殊的字符串,有很多的字符串操作方法,非常灵活(支持链式编程!),是 S t r i n g String String类型操作底层逻辑实现容器,可以节约很多的内存资源!!

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值