【问题标题】:Storing Vs. Generating Strings存储与。生成字符串
【发布时间】:2023-03-10 22:30:02
【问题描述】:

在成为 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 类中的非静态变量,以便将一些来自其他来源的动态信息传达给玩家。

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

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

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

我希望这对于我的最终问题来说不会太长,但我希望我也可以在我的方法方面走上编程正义的道路。也就是说,如果您看到我应该做的不同的事情,或者我可能正在经历的根本误解的迹象,请告诉我!你们都很棒,谢谢!

【问题讨论】:

    标签: java string performance minecraft


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢您快速彻底的回复!为了实现速度和可维护性的最佳组合,我决定将消息存储在变量中,这些变量只使用格式化字符构建一次,这样我就可以在字符串上使用 String.format。例如,我将消息作为字符串存储在 Messenger 中:String playerPositionMessage = "Your coordinates are: %s, %s, %s."; 然后方法是:` public void playerPosition(Player player, int x, int y, int z) { player.sendMessage(String.format( playerPositionMessage, x, y, z); } ` Nanotime 基准测试产生了可接受的速度。
    猜你喜欢
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 2013-08-29
    • 2010-12-30
    相关资源
    最近更新 更多