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

克里托斯·基里亚库(Klitos Kyriacou)

有关性能考量的问题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 DeduplicationCompact Strings

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

char * / string串联而不复制?

来自分类Dev

String.substring()的性能与手动查找复制到char []数组中的性能相比如何?

来自分类Dev

Java根据什么基础找到String数组的最大值和最小值?

来自分类Dev

如何在C的char数组中存储String值?

来自分类Dev

为什么我无法使用类型为'String.SubSequence'(又名'Substring')的参数对类型为[[String:[String]]]的值进行下标?

来自分类Dev

将char指针数组的值复制到char数组

来自分类Dev

如何检测String.substring是否复制字符数据

来自分类Dev

Julia将String转换为Char,或将Array {SubString {String},1}转换为char

来自分类Dev

将char []中的值复制到整数

来自分类Dev

我正在通过使用String(char)创建String,但是却获得了可选值,如何将其删除?

来自分类Dev

如何使用包含空值的char *初始化std :: string

来自分类Dev

使用winforms从iphlpapi.h(GetAdaptersInfo)显示返回值(从char * / wchar *转换为System :: String)

来自分类Dev

如何使用string(int,char)函数为声明的字符串添加或更改值?

来自分类Dev

将String格式化为十六进制值,并将其附加到char数组中

来自分类Dev

为什么`std :: string`的赋值运算符将`char`按值而不是`const`引用?

来自分类Dev

如何将具有最小ASCII值的char递归地放在String的末尾?

来自分类Dev

打印'String.CharacterView.Index'值的值

来自分类Dev

获取ArrayList <HashMap <String,String >>值

来自分类Dev

如何清除哈希映射<string,string>值?

来自分类Dev

JavaFX TableView的String []列和String [] []值

来自分类Dev

'String' 类型的值不能转换为 'String()'

来自分类Dev

复制 std::string::insert(int pos, char ch)

来自分类Dev

从ArrayList的键/值中检索值HashMap <String,String>

来自分类Dev

比较String.Index值

来自分类Dev

从Mockito返回when()的String值

来自分类Dev

Max(String)返回什么值

来自分类Dev

值|| 不是String的成员-scala

来自分类Dev

在Jlist中获取String的值

来自分类Dev

使用循环设置 string[] 值

Related 相关文章

  1. 1

    char * / string串联而不复制?

  2. 2

    String.substring()的性能与手动查找复制到char []数组中的性能相比如何?

  3. 3

    Java根据什么基础找到String数组的最大值和最小值?

  4. 4

    如何在C的char数组中存储String值?

  5. 5

    为什么我无法使用类型为'String.SubSequence'(又名'Substring')的参数对类型为[[String:[String]]]的值进行下标?

  6. 6

    将char指针数组的值复制到char数组

  7. 7

    如何检测String.substring是否复制字符数据

  8. 8

    Julia将String转换为Char,或将Array {SubString {String},1}转换为char

  9. 9

    将char []中的值复制到整数

  10. 10

    我正在通过使用String(char)创建String,但是却获得了可选值,如何将其删除?

  11. 11

    如何使用包含空值的char *初始化std :: string

  12. 12

    使用winforms从iphlpapi.h(GetAdaptersInfo)显示返回值(从char * / wchar *转换为System :: String)

  13. 13

    如何使用string(int,char)函数为声明的字符串添加或更改值?

  14. 14

    将String格式化为十六进制值,并将其附加到char数组中

  15. 15

    为什么`std :: string`的赋值运算符将`char`按值而不是`const`引用?

  16. 16

    如何将具有最小ASCII值的char递归地放在String的末尾?

  17. 17

    打印'String.CharacterView.Index'值的值

  18. 18

    获取ArrayList <HashMap <String,String >>值

  19. 19

    如何清除哈希映射<string,string>值?

  20. 20

    JavaFX TableView的String []列和String [] []值

  21. 21

    'String' 类型的值不能转换为 'String()'

  22. 22

    复制 std::string::insert(int pos, char ch)

  23. 23

    从ArrayList的键/值中检索值HashMap <String,String>

  24. 24

    比较String.Index值

  25. 25

    从Mockito返回when()的String值

  26. 26

    Max(String)返回什么值

  27. 27

    值|| 不是String的成员-scala

  28. 28

    在Jlist中获取String的值

  29. 29

    使用循环设置 string[] 值

热门标签

归档