String、StringBuilder和StringBuffer

String、StringBuilder和StringBuffer

String类
当一个字符串用String定义的时候,如果需要改变(删除或添加)新的字符串,则需要创建一个新的对象,然后再进行添加和修改。

public class TestString{
	public static void main(String[] args){
		String str = new String("我的祖国");
        String str2 = new String("我爱");
        System.out.println(str2+str);
   }
}

StringBuffer和StringBuilder
如果一个字符串用StringBuilder和StringBuffer定义的时候,在添加和修改字符串则不需要创建一个新的对象,直接进行添加和修改即可。

public class TestStringBuffer{
	public static void main(String[] args){
		StringBuffer sb = null;
		sb = new StringBuffer("liu");
		sb.append("123");
		sb.append("456");
		System.out.println(sb);
	}
}

运行结果:gao123456
该代码略微有一点繁琐,可以直接创建一个对象,然后直接定义。例如:

public class TestBuffer{
	public static void main(String[] args){
		StringBuffer sb = new StringBuffer("liu");
		sb.append(123);
		sb.append(456);
		Ststem.out.println(sb);
    }
}

上面两种代码书写的方式不一样,但是意义相同,都是给原本的对象中的字符串添加相应的字符串。

tips

StringBuffer中可以直接写sb.append("liu").append("123").append("456");例如:

StringBuffer sb = new StringBuffer("liu");
sb.append("123").append("456").append("789");
System.out.println(sb);

运行结果:liu123456789

为什么StringBuffer和StringBuilder可以直接连续进行修改字符串?

在这里插入图片描述
在这里插入图片描述
上面的两张截图是StringBuffer的源代码,可见每一次的创建的新的方法都是返回的this原来的对象,而String则不是这样,因此由于每一次都返回的同一个对象,也可以直接在后面加append然后添加新的字符串。

StringBuffer的其他应用
1.插入字符串

StringBuffer sb2 = new StringBuffer("我的祖国");
sb2.insert(0,"爱").insert(0,"我");     //插入字符串
System.out.println(sb2);

运行结果:我爱我的祖国

tipsSb.insert(0,"爱").insert(0,"我");
先从第0处(开始的位置)插入一个字符串“爱”,然后得到新的字符串,再从第0处(开始的位置)插入一个字符“我”,最后则为“我爱我的祖国”。

2.删除字符串

在第1个代码的基础上继续删除字符串

sb2.delete(0,2);
System.out.println(sb2);

运行结果:我的祖国
tips:在第0处(开始的位置)上删除了两个字符,则删除了“我爱”,最后的运行结果就是“我的祖国”。

3.删除获取某个字符串/逆序

在第2个代码块的基础上继续进行删除获取字符串和逆序

sb2.deleteCharAt(0).deleteCharAt(0);
System.out.println(sb2.charAt(0));   //获取某个字符串
System.out.println(sb2.reverse());   //字符串逆序

运行结果:祖
国祖
tips:删除从开始的位置连续两个字符,然后第一行输出的时获取的第0个字符,也就是祖国的祖。第二行reverse是将字符串逆序,然后进行输出。

为什么String类是不可变序列,而StringBuilder和StringBuffer是可变字符序列?

因为在String类的源码中加入了final,意思是不可变的,如果每次更改的话就要创建新的对象。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值