java - java中没有分配的字符串连接

标签 java string memory concatenation allocation

有没有办法在不分配内存的情况下连接两个字符串(不是最终的)?

例如,我有这两个字符串:

final String SCORE_TEXT = "SCORE: ";
String score = "1000"; //or int score = 1000;

当我连接这两个字符串时,会创建一个新的 String 对象。

font.drawMultiLine(batch, SCORE_TEXT + score, 50f, 670f);//this creates new string each time

由于这是在主游戏循环中完成的(一秒内执行约 60 次),因此有很多分配。

我可以在没有分配的情况下以某种方式做到这一点吗?

最佳答案

显而易见的解决方案是不在每一帧上重新创建输出 String,而是仅在它发生变化时才重新创建。

实现此目的的一种方法是将其存储在主循环之外的某个位置,并在特定事件发生时更新它,即“分数”实际发生变化。在您的主循环中,您只需使用预先创建的 String

如果您不能/或不想使用这种基于事件的方法,您可以始终存储“先前”分数,并且仅在先前分数与当前分数不同时才连接一个新字符串。

根据您的分数实际变化的频率,这应该会减少大多数重新分配。当然,除非分数以 60 fps 的速度变化,在这种情况下,这整点是完全无声的,因为没有人能够阅读您正在打印的文本。

关于java - java中没有分配的字符串连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30502871/

相关文章:

java - 使用 jQuery 1.9 解析 JSON 时出错,但 eval 中没有错误

java - 删除netbeans中的鼠标监听器

java - 可以离线进行第一个 Maven 构建吗?

c - malloc 分配的指针的大小

memory - Posix 中的防护尺寸是多少?

c - 查找进程内存中未使用的内存

java - GWT:从 Java 调用 javascript 函数

c - 如何在字符串中添加数字? (C)

c# - 如何将1个字符串分成多个字符串

javascript - 将分割字符串的子字符串包装在元素中