java - 哪个在内存 : char[] or String? 方面是有效的

标签 java android arrays string

我正在开发 Android 应用程序。应用程序的主要要求是它在内存方面应该是高效的。那么,我应该继续进行哪些操作?

String batterylevel;
batterylevel = Float.toString(batteryPct);

char batterylevel[];
batterylevel = Float.toString(batteryPct).toCharArray();

最佳答案

在 Oracle 的 JDK 中,一个字符串有四个实例级字段:

  • 一个字符数组
  • 积分偏移量
  • 完整的字符数
  • 一个完整的哈希值

这意味着每个 String 引入了一个额外的对象引用(String 本身),以及除了字符数组本身之外的三个整数。 (偏移量和字符数允许在通过 String#substring() 方法生成的 String 实例之间共享字符数组,这是其他一些 Java 库实现者回避的设计选择。)除了额外的存储成本之外,还有一个更高级别的间接访问,更不用说 String 用来保护其字符数组的边界检查了。

字符串是不可变的。这意味着一旦您创建了字符串,如果另一个进程可以转储内存,则您无法(除了反射)在 GC 启动之前摆脱数据,这意味着内存浪费。

使用数组,您可以在完成数据后显式删除数据:您可以用任何您喜欢的内容覆盖数组。

据我所知,对于您的情况而言,char[] 在内存方面更好。

关于java - 哪个在内存 : char[] or String? 方面是有效的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29113883/

相关文章:

java - 如何设置android表格布局行上项目之间的边距

java - Sonar 提示: use StringBuilder instead of StringBuffer

android - 使用什么类型的小部件可以让用户将 Excel 文件上传到 Flutter 应用程序?

C# 数组 : Order By Descending, 包括空值

arrays - 到达某一点所需的最少步数

java - 如何在没有 ORM 的情况下对 DAO 进行单元测试

java - 如何创建在固定时间间隔内触发一次且仅触发一次的流式Beam管道

android - 使用 SDCard 上的一些文件创建一个 zip 文件

javascript - 为什么 setTimeout 游戏循环在 touchstart 事件触发时出现延迟?

python - 多个维度的 Numpy 滚动