当前位置: 首页 > 面试题库 >

String.substring()复制基础char []值[关闭]

呼延渝
2023-03-14
问题内容

有关绩效考量的问题String.substring。在Java
1.7.0_06之前,该String.substring()方法返回一个新String对象,该对象与其父对象共享相同的基础char数组,但偏移量和长度不同。为了避免在只需要保留小的子字符串时在内存中保留非常大的字符串,程序员习惯于编写如下代码:

s = new String(queryReturningHugeHugeString().substring(0,3));

从1.7.0_06开始,不再需要创建新StringString字符串,因为在Oracle的实现中,子字符串不再共享其基础char数组。

我的问题是:我们可以依赖Oracle(和其他供应商)char[]在将来的某些发行版中不回过头来共享,而是这样做吗?s = s.substr(...)还是应该明确创建一个新的String,以防JRE的某些将来发行版开始使用共享实现?再次?


问题答案:

的实际表示形式String是内部实现细节,因此您无法确定。但是,根据Oracle工程师的公开谈话(最著名的是@shipilev),将其改回的可能性很小。这样做不仅是为了防止可能的内存泄漏,而且是为了简化String内部。使用更简单的字符串,可以更轻松地实现许多优化技术,例如String
Deduplication
或Compact
Strings



 类似资料:
  • 简介 number是JavaScript基本类型之一 ES6中提供了新的八进制,十六进制数值表示方法,但是我们基本不会用到,下面将不会介绍这一知识点 ES6主要对Math对象做了一些扩展,新增了一些和数学关系密切的API 正文 在ES6以前,我们使用isNaN这个全局方法判断一个值或者变量是否是NaN ES6中,Number对象上也添加了isNaN方法,并且与以前的isNaN有重要的区别 isNa

  • 关于矢量图形 矢量图形(有时称作矢量形状或矢量对象)是由称作矢量的数学对象定义的直线和曲线构成的。矢量根据图像的几何特征对图像进行描述。 您可以任意移动或修改矢量图形,而不会丢失细节或影响清晰度,因为矢量图形是与分辨率无关的,即当调整矢量图形的大小、将矢量图形打印到 PostScript 打印机、在 PDF 文件中保存矢量图形或将矢量图形导入到基于矢量的图形应用程序中时,矢量图形都将保持清晰的边缘

  • 在本章中,我们将研究basic controls 。 Foundation提供基本控件,如buttons , sliders和switches 。 下表列出了Foundation中使用的基本控件。 Sr.No. 基本控制和说明 1 Button Foundation支持许多按钮样式,可根据您的需要进行定制。 2 按钮组 它们是相应动作元素的容器。 当一组操作显示在栏中时,它可以正常工作。 3 关闭

  • 的JavaDoc没有说明关闭底层: https://docs.oracle.com/javase/8/docs/api/java/io/inputstreamreader.html#close-- 从类复制的描述:Reader 关闭流并释放与之关联的任何系统资源。一旦流关闭,进一步的read()、ready()、mark()、reset()或skip()调用将引发IOException。关闭以前关

  • 系统环境MAC OS 10.10 MySQL版本,5.7.9 Mac 安装mysql很简单,官网下载安装包,双击安装就可以了,有几个地方需要注意 在Mac下用DMG包新安装mysql,在安装完毕最后一步会随机分配一个root密码,记住密码,安装完毕用root登录,但密码是过期状态,mysql默认情况下密码有效期是360天,需要重新改下,具体请看Password Expiration Policy

  • 本文向大家介绍一些java二进制的相关基础知识,包括了一些java二进制的相关基础知识的使用技巧和注意事项,需要的朋友参考一下 说明 任何东西都有规范,提到JAVA就会提到2个规范,JAVA语言规范、JVM规范。JAVA语言规范主要定义JAVA的语法、变量、类型、文法等等,JVM规范主要定义Class文件类型、运行时数据、帧栈、虚拟机的启动、虚拟机的指令集等等。 JAVA语言规范主要定义什么是JA