JDK 6和JDK 7中的substring()方法

85 篇文章 0 订阅
82 篇文章 0 订阅

小伙伴们注意了!

小编在这里给大家送上关注福利:

转发本文,关注+私信小编“资料”即可领取小编精心准备的资料一份!

JDK 6中子字符串(int beginIndex, int endIndex)方法的实现与JDK 7不同。

这篇文章解释了其中的差异。

为了简单起见,substring()方法表示本文中的substring(int beginIndex, int endIndex)方法。

1. substring()是什么?

substring(int beginIndex, int endIndex)方法返回一个以beginIndex开头,以endIndex-1结尾的字符串。

输出:

2. 调用substring()时会发生什么?

你可能知道,由于x是不可变的,当x被赋值为x.substring(1,3)的结果时,它指向一个新的字符串,如下所示:

然而,这个图表并不完全正确。

在JDK 6和JDK 7之间,调用substring()时实际发生的情况是不同的。

3.JDK 6中的substring()

字符串由后端中的char数组支持。

在JDK 6中,String类包含3个字段:char value[]、int offset、int count。

它们用于存储实际字符数组、数组的第一个索引、字符串中的字符数。

当调用substring()方法时,它会创建一个新的字符串,但是字符串的值仍然指向堆中的相同数组。

这两个字符串之间的区别是它们的count和offset值。

下面的代码经过了简化,只包含解释这个问题的关键点。

4. JDK 6中的子字符串()引起的问题

如果你有一个非常长的字符串,但是每次使用substring()只需要一小部分。这将导致性能问题,因为只需要一小部分,就可以保留整个组件。对于JDK 6,解决方案是使用以下代码,这将使它指向一个真正的子字符串:

5. JDK 7中的substring()

这在JDK 7中得到了改进。

在JDK 7中,substring()方法实际上在堆中创建一个新数组。


最后,想学习Java的小伙伴们!

关注“速学java”公众号就可以拿到一份我为大家准备的Java学习资料!

对Java感兴趣的小伙伴也可以加 小编V❤: suxuejava

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值