java - 有多少人被 Java 子串内存问题坑过?

标签 java substring

<分区>

最近发现java.lang.String.substring方法返回的不是新的字符串,而是被子字符串化后的原始字符串的 View 。这可能会影响内存。例如,如果您正在读取一个 ascii 文件,并使用子字符串解析文件中的标记并将子字符串的结果存储在内存中的某处——您实际存储在内存中的是子字符串操作之前的整个字符串!您当然可以通过在您自己的版本中包装子字符串来解决此问题,该版本返回子字符串结果的新字符串。

最佳答案

我曾经被它咬过一次,逐行阅读字典文件。每行都很短,但是 BufferedReader 创建的缓冲区意味着每个字符串都由一个 80 个字符的数组支持。

那是我第一次了解到写作的意义:

word = new String(word);

虽然大多数时候这不是问题 - 当然它可以比“采用完全独立的副本”方法更有效。

关于java - 有多少人被 Java 子串内存问题坑过?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1036719/

相关文章:

java - 具有动态数字列和行的 Android 表格 View

sql-server - 如何在SQL中的2个相同字符之间选择一个字符串

java - 从字符串中删除时间戳

局域网访问mysql

java - 检查 java 线程是否已被 join()ed

java - 什么是NullPointerException,我该如何解决?

javascript - 使用 jQuery 获取字符串的子字符串

mysql - 使用 MySQL 在字符串中查找语言(做子字符串?)

Excel公式查找单元格中最短的字符串/两位数字

java - 级联加入两个文件很慢