存储比生成字符串

时间:2016-03-04 00:19:30

标签: java string performance minecraft

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

我尝试搜索此主题,但并不完全确定如何说出来。

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

但是,我不想简单地使用该方法在每个实例中直接发送消息,而是我更喜欢将所有消息存储在一个位置,以便使代码更容易在输入错字或决定更改文本时进行管理。

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

一个假设的例子如下:

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

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

这些方法是静态的,因为我读到静态方法的内存占用量较小,但有些方法引用了Messenger类中的非静态变量,以便将一些动态信息从其他来源传递给播放器。 / p>

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

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

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

使用

我希望这对我的终极问题来说并不过分冗长,但我希望我也可以在关于我的方法的程序中引导正义。也就是说,如果你看到我应该采取不同的行动,或者我可能会遇到的根本误解的迹象,请告诉我!你太棒了,谢谢!

1 个答案:

答案 0 :(得分:2)

我认为您每次调用playerPosition时都会更快地构建字符串(如您的示例所示),或者每次x y都存储字符串},或z已更新,并在每次调用playerPosition时返回。

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

如果比获取位置更频繁地更新坐标,则在playerPosition中构建字符串。如果你比更新玩家位置更频繁地查询玩家位置,那么在updateCoordinates(或者你拥有的任何等效方法)中构建字符串。

例如,如果这是用于带有图形的2D平台游戏,您将不断查询的玩家位置,而该位置只会在按键上更新;因此,您希望在updateCoordinates方法中构建String。