首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

『API探索』之substring()字节字符截取两种方式及内存泄漏有关问题

2012-12-18 
『API探索』之substring()字节字符截取两种方式及内存泄漏问题substring()或者substr()是大部分主流语言所支

『API探索』之substring()字节字符截取两种方式及内存泄漏问题

substring()或者substr()是大部分主流语言所支持的,同时对字符串的操作是编程中最频繁的操作,当然对截取字符串也是最常用操作之一。所以今天就讨论一下subtring()。

以JAVA举例,在JAVA中我们看看系统提供的substring()有什么问题?

我们首先看看JDK中substring()的源码:

public class MySubString {public static void main(String[] args) {String s = "人在江湖,记录那些有趣的事";System.out.println(subStringByByte(s, 2, 4));System.out.println(subStringByByte(s, 2));}public static String subStringByByte(String s, int begin, int end) {if(null == s || "".equals(s))return null;if (begin < 0 || end > s.getBytes().length || end - begin < 0)return null;byte[] bs = s.getBytes();byte[] new_bs = new byte[end-begin];int index = 0;for(int i = begin; i < end; i++){new_bs[index++] = bs[i];}return new String(new_bs);}public static String subStringByByte(String s, int begin) {return subStringByByte(s, begin, s.getBytes().length);}}


2楼smszhuang168昨天 15:49
能分一下段落看着就更清楚了
Re: nash_昨天 16:45
回复smszhuang168n抱歉,我用手机改下文章后,没想到变成纯文本了
Re: smszhuang168昨天 08:59
回复nash_n嗯,这样看着不错,顶了
1楼anhui12345前天 09:53
你好!对于本文有一些疑惑:n>>>> 截取字符串的时候并没有重新创造一个String对象n->可是看src里面,明明是new了个string啊: new String(offset + beginIndex, endIndex - beginIndex, value); 没有重新创造的是char[]吧,这样一来,原来的String就没地方引用了啊。不能被释放的是char[]吧,不是旧的String(可能memory上差别并不大)?n盼指导。
Re: nash_昨天 14:06
回复anhui12345n你后面应该说错了,原来的string没有被释放
Re: nash_昨天 14:41
回复anhui12345n你说的对,是创建了新对象,共享了value,感谢您提出错误之处

热点排行