String的subString()和split()方法共享原String对象的char[]

看了这篇文章 http://www.iteye.com/topic/626801,在这里做个记录。

String类的subString()方法中使用了一个私有的String构造方法,这个构造方法直接将原来的String中的char[]数组的引用,赋予了新创建的String对象,二者共享了char[]。

subString()的部分代码:
return ((beginIndex == 0) && (endIndex == count)) ? this :
new String(offset + beginIndex, endIndex - beginIndex, value);
}


其中使用的构造方法代码:
// Package private constructor which shares value array for speed.
String(int offset, int count, char value[]) {
this.value = value;
this.offset = offset;
this.count = count;
}


根据注释,共享char[]是为了执行速度。

split()方法间接调用了subString()方法。

要小心subString()的使用,有可能出现文章中所说的情况,实际长度很小的String,却引用了一个长度很大的char[],造成内存的浪费。为了避免这种情况,需要用String的构造方法String(String original)对截取后的String进行构造,String(String original)会重新创建一个char[],只把有效的那些构成String的字符存入其中。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值