栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java中“ new String(…)”表达式的目的是什么?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java中“ new String(…)”表达式的目的是什么?

你可能需要的一个地方new String(String)是强制子字符串复制到新的基础字符数组,如

small=new String(huge.substring(10,20))

但是,不幸的是,此行为是未记录的,并且取决于实现。

当将大文件(最多20 MiB)读入字符串并在事后将其刻成几行时,我对此感到非常恼火。我最后得到了引用由整个文件组成的char []的所有字符串。不幸的是,与处理文件相比,我无意间对整个数组的引用保留了更长的时间,这比处理文件要更长的时间-我被迫用来

new String()
解决该问题。

唯一与实现无关的方法是:

small=new String(huge.substring(10,20).toCharArray());

不幸的是,这必须将数组复制两次,

toCharArray()
一次在String构造函数中一次。

需要有一种通过复制现有字符串的字符来获取新String的文档化方法;或String(String)需要改进的文档以使其更明确(此处有隐含含义,但相当含糊且易于解释)。

假设文档没有陈述的陷阱
为了回应不断出现的评论,请观察Apache Harmony的实现

new String()
是:

public String(String string) {    value = string.value;    offset = string.offset;    count = string.count;}

没错,那里没有底层数组的副本。但是,它仍然符合(Java 7)字符串文档,因为它:

初始化一个新创建的String对象,使其表示与参数相同的字符序列;换句话说,新创建的字符串是参数字符串的副本。除非需要显式的原始副本,否则不需要使用此构造函数,因为字符串是不可变的。

突出的部分是“参数字符串的副本”;它不会说“参数字符串和支持该字符串的基础字符数组的副本”。

请注意,你应按照文档而不是一种 实现编程。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/377333.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号