2016-03-04 58 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