StringBuffer-非完全可变字符串

这篇文章也是我对StringBuffer的一点看法,若有不妥之处,还请大家指出
估计Java初学者都知道,String是不可变字符串,StringBuffer是可变字符串,之前我也是这样理解的,但是今天下午,发现了一个奇怪的现象,发现StringBuffer并非完全可变,所以我将之称为非完全可变字符串。
先看看下面这段

public static void main(String[] args) {
String str = new String("Hello");
str.concat("World");
System.out.println(str);
str.substring(0, 3);
System.out.println(str);
System.out.println("<=========================>");
StringBuffer sb = new StringBuffer("Hello");
sb.substring(0, 3);
System.out.println(sb);
sb.append("World");
System.out.println(sb);
}

其输出结果如下:

Hello
Hello
<=========================>
Hello
HelloWorld

通过对比String的substring和StringBuffer的substring方法可以看出,他们都没有改变原来字符串的值,String很好理解,由于是不可变字符串,所以原字符串肯定不会变,但是为何StringBuffer也没变呢??它不是号称可变字符串嘛,那就应该和其他方法一样啊(比如代码中的append方法),改变原来字符串的值啊,但是这里完全没变嘛,再看看StringBuffer的substring方法具体实现。

public String substring(int start, int end) {
if (start < 0)
throw new StringIndexOutOfBoundsException(start);
if (end > count)
throw new StringIndexOutOfBoundsException(end);
if (start > end)
throw new StringIndexOutOfBoundsException(end - start);
return new String(value, start, end - start);
}

由此可见,其他该方法也是产生一个新的字符串,并不会更改原字符串的值。
那这里本人就觉得很不理解,为什么StringBuffer的这个方法更String的一样呢??难道这是一个Bug??应该不是,如果要是,SUN早就应该改过来了,那这里SUN到底是出于什么目的要将StringBuffer的substring这样实现呢??不理解
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值