java - 存储与保存生成字符串

标签 java string performance minecraft

在成为 Stackoverflow 多年的忠实用户之后,我终于决定写下自己的问题,所以如果我错过了什么,我深表歉意。

我尝试搜索这个主题,但不太确定如何措辞。

我正在使用 Java 进行编程,并正在为 Minecraft 服务器编写一个插件。我想让这个插件响应用户输入,所以我向玩家发送各种各样的消息,包括成功消息、帮助消息、错误等。向玩家发送消息可以通过以下简单方法来实现播放器对象:player.sendMessage(String message);

但是,我不想简单地使用该方法在每个实例中直接发送消息,而是更愿意将所有消息存储在一个位置,以便使代码更易于管理发生拼写错误或决定更改文本的事件。

我当前的实现是一个名为 Messenger 的类。对于每条可以发送给玩家的消息,它包含一个 public void 方法,该方法接受玩家作为参数,以及与消息相关的特定信息,以便使其突出显示并包含在消息中。

假设的示例如下所示:

public void playerPosition(Player player, int x, int y, int z) {
    player.sendMessage("Your coordinates are: "+x+", "+y+", "+z+".");
}

但是,我对 Java 仍然很陌生,并且正在尽最大努力实现最佳实践和高效设计。我知道有更好的方法来处理这种情况并保持高水平的可读性和可维护性。

这些方法将是静态的,因为我读到静态方法具有较小的内存占用,但其中一些引用 Messenger 类中的非静态变量,以便从其他来源向玩家传达一些动态信息。

我将对其进行修改,以便将所需的所有信息直接传递给方法,这样它们就可以是静态的。

但是,我想知道:每次调用该方法时生成消息结果是否更有效,或者我应该将消息内容存储在字符串中并简单地返回该字符串?方法的编译代码是否比返回存储的字符串更快、更高效?

如果返回存储的字符串更快,我可以简单地使用参数占位符存储字符串以供 String.format() 稍后使用;

我希望这对于我的最终问题来说不会太长,但我希望我的方法也能被引导走上正确的编程之路。也就是说,如果您发现我应该采取不同的做法,或者有迹象表明我可能遇到了根本性的误解,请告诉我!你们都很棒,谢谢!

最佳答案

我认为您在问每次调用playerPosition时构建字符串(如您的示例中所示)或每次xy时存储字符串是否更快> 或 z 被更新,并在每次调用 playerPosition 时返回。

这取决于哪个操作发生得更频繁。您希望字符串构建最少发生。

如果更新坐标的频率比获取位置的频率高,则在 playerPosition 中构建字符串。如果查询玩家位置的频率比更新玩家位置的频率高,则在 updateCooperatives 中构建字符串(或您拥有的任何等效方法)。

例如,如果这是一款带有图形的 2D 平台游戏,您将不断查询玩家位置,而该位置只会在按键时更新;因此,您希望在 updateCooperatives 方法中构建字符串。

关于java - 存储与保存生成字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35785716/

相关文章:

java - 谁能帮我解决依赖注入(inject)问题?

java - 在 RxJava 中组合未知数量的 Observable

python - 从反斜杠到斜杠(创建以数字命名的文件夹)

JavaScript : String split() Method only push unique char

c++ - 在 C/C++ 中获得正模的最快方法

java - Android - 一次设置变量并在应用程序中随处使用

java - 输出对象到文件

java - 抛出意外的 StringIndexOutOfBoundsException?

javascript - AngularJS $范围

performance - Canvas 与 SVG 动画(效果 [过滤器] 和性能)