String 和 StringBuffrer 的区别

String表示的是字符串常量,String类中内容一旦被初始化,其内容和长度就不能被更改

说到这里,可能有人就会疑惑了 (不是可以通过String类的replace()等方法来改变其内容和长度?)

String str = "abc";
System.out.println(str.replace("b", "12345"));
输出结果:a12345c

String str = "abc";
str = "aaaa!";
System.out.println(str);
输出结果:aaaa!

这里的字符串长度和内容不是都已经该变了吗,那岂不是和 String 类的特性相违背了


其实这里的改变并不是真正的改变,改变后的字符串是属于一个新的字符串对象,为什么这样说呢?

因为 String 内部被 final 修饰,在 String 对象初始化时,内存就会为其分配一个空间用于存储它的值,在执行str = “aaaa!”;语句后。内存就会将其作为一个新的 String 对象重新为其分配一处空间来存储它的值,而原来的 String 对象的值还存在于内存中,没有发生任何改变。


那为什么输出的结果是“aaaa!”而不是“abc”?

因为 str 只是一个 String 对象的引用指向,开始时指向"abc"存储地址,在创建了新的String对象后,该指向就指向了这个新的 String 值"aaaa!“的存储地址。所以输出的结果是"aaaa!” 而不是"abc"



String 和 StringBuffrer 的区别

StringBuffer 类弥补了 String 类的内容不能被修改的这个不足之处,StringBuffer 类(又称字符缓冲区)表示的字符容器,其内容及长度可以被修改的,修改后不会产生新的 StringBuffer 对象.

<f String 类覆盖了 Object 类的 equals() 方法,而 StringBuffer 类没有.

String s1 = "好好学习!";
String s2 = "好好学习!";
System.out.println(s1.equals(s2));
StringBuffer sb1 = new StringBuffer("天天向上!");
StringBuffer sb2 = new StringBuffer("天天向上!");
System.out.println(sb1.equals(sb2));

输出结果:
true
false

String 类可以通过 '+'号对两个 String 对象进行拼接,而 StringBuffer 类不可以.

String s1 = "好好学习,";
String s2 = "天天向上!";
System.out.println(s1 + s2);  //输出结果:好好学习,天天向上!
StringBuffer sb1 = new StringBuffer("好好学习,");
StringBuffer sb2 = new StringBuffer("天天向上!");
System.out.println(sb1 + sb2); //此处报错
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

家师曹先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值