2016-03-04 65 views
2

经过多年的Stackoverflow的忠实用户,我终于决定写我自己的问题,所以我很抱歉如果我错过了一些东西。存储VS.生成字符串

我试过寻找这个话题,但并不完全确定如何说话。

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

但是,我不想仅仅使用该方法直接在每个实例中发送消息,而是宁愿将所有消息存储在一个位置,以便使代码在发生错字或决定更改文本时更容易管理。

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

一个假设的例子是这样的:

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

不过,我还是新来的Java和我尽我所能去实现最佳实践和高效的设计。我知道有更好的方法来处理这种情况并保持高度的可读性和可维护性。

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

我要重做,以便所有需要的信息都会直接传递给方法,所以它们可以是静态的。

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

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

我希望这对于我的最终问题来说不是太冗长,但是我希望我也可以在编写正义方面领导我的方法。也就是说,如果你发现我应该采取不同的做法,或者表示我可能遇到的根本性误解,请告诉我!你们都很棒,谢谢!

回答

2

我想你问如果它的速度更快每个playerPosition被调用时建立的字符串(如在你的例子),或每xy,或z被更新时,存储字符串,并返回每次playerPosition这叫做。

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

如果您比获取位置更频繁地更新坐标,请在playerPosition中构建字符串。如果您比更新频率更频繁地查询播放器位置,请在updateCoordinates(或您拥有的任何等效方法)中构建字符串。例如,如果这是用于2D图像的平台游戏,则您将持续询问玩家位置,而位置只会在按键时更新;因此您需要在updateCoordinates方法中构建字符串。

+0

好答案!!!! – RenegadeAndy

+0

感谢您的快速和彻底的回应! 为了实现速度和可维护性的最佳组合,我决定将消息存储在只使用格式化字符构建一次的变量中,以便对字符串使用String.format。 例如,我的信息存储为信使的字符串: '字符串playerPositionMessage = “您的坐标为:%S%S%S。”;' 然后,该方法将是: ' public void playerPosition(Player player,int x,int y,int z)player.sendMessage(String.format(playerPositionMessage,x,y,z); } ' Nanotime benchmarking产生了可接受的速度。 – quietboxcrafter