StringBuilder的简单介绍(学习笔记)

目录

1.String和StringBuilder的区别

2.String字符串的拼接操作

 3.StringBuilder的常见方法


程序开发过程中,我们常常碰到字符串连接的情况,方便和直接的方式是通过"+"符号来实现,但是如果要多次拼接我们往往会选择使用StringBuilder 这是为什么?

1.String和StringBuilder的区别

  • String类表示不可变字符串对象(在jdk8 及以前内部定义了 final char[] value 用于存储字符串数据。jdk9 时改为 final byte[] value。),即一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。

  • StringBuilder类代表可变字符串对象,底层用char[] value数组存储字符串数据。

2.String字符串的拼接操作

1.常量与常量的拼接结果在常量池。

2.只要拼接的双方其中有一个是变量 (常量不算,即final修饰的变量不算),就需要在堆空间创建一个 StringBuilder对象。

public class Test1 {
	public static void main(String[] args) {
		String str = "a";
		String str1 = "aa";
		String str2 = "a"+"a";
		System.out.println(str1== str2);//true
		String str3 =str1 +"a";
		System.out.println(str1== str3);//false
	}
}

 我们可以看到在执行str3的拼接操作的时候底层先创建了 StringBuilder对象,那既然底层字符串拼接都已经使用StringBuilder完成了 我们为什么还要学习StringBuilder呢? 请看下面这个例子

3.当我们需要多次进行拼接字符串操作的时候。

public class Test2 {
	public static void main(String[] args) {
		String str = "a";
		String str1 = "a"+str;
	    str1 = str1+"b";
	    str1 = str1+"c";
	}
}

 我们可以看到在底层它一共创建了3个StringBuilder对象,最后通过toString创建新的 String对象这样即耗时,又浪费空间。所以如果要进行大量的字符串拼接操作我们会选择使用StringBuilder。

4.我们来对比一下拼接字符串10000次使用“+”和StringBuilder的耗时。

public class Test2 {
	public static void main(String[] args) {
		String str = "a";
		String str1="" ;
		long t1 = System.currentTimeMillis();
		for (int i = 0; i < 10000; i++) {
			 str1+="a";
		}
		long t2 = System.currentTimeMillis();
		System.out.println("使用+拼接共耗时:"+(t2-t1)+"毫秒");
		StringBuilder list = new StringBuilder();
		long t3 = System.currentTimeMillis();
		for (int i = 0; i < 10000; i++) {
			list.append("a");
		}
		long t4 = System.currentTimeMillis();
		System.out.println("使用StringBuilder共耗时:"+(t4-t3)+"毫秒");
	}
}
使用+拼接共耗时:45毫秒
使用StringBuilder共耗时:0毫秒

 3.StringBuilder的常见方法

public class Test2 {
	public static void main(String[] args) {
		StringBuilder list = new StringBuilder();
		list.append("aa"); //添加元素
		list.append("aa"); 
		list.append("aa"); 
		list.append("aa");
		list.toString();//返回一个内容相同的字符串
		list.delete(0, 2);//删除起始位置(含)到结尾位置(不含)之间的字符串
	}
}

(仅是学习梳理如有问题 ----->菜鸡可互啄,大佬轻点锤 )

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值