字符串连接,在java中没有分配

ped*_*dja 6 java memory string allocation concatenation

有没有办法连接两个字符串(不是最终)而不分配内存?

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

final String SCORE_TEXT = "SCORE: ";
String score = "1000"; //or int score = 1000;
Run Code Online (Sandbox Code Playgroud)

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

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

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

我可以不分配地以某种方式做到这一点吗

ci_*_*ci_ 5

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

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

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

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