2017-02-17 53 views
0

通過直接在Java文件中編寫像stringVar.equals("name")那樣創建單獨的常量文件(如下面的類「常量」)的整體優勢(就內存管理等而言)是什麼?我知道,即使我們使用「名稱」2次(如下),只有一個文字會在字符串池中創建嗎?字符串文字與java中的常量文件

stringVar1.equals("name")stringVar2.equals("name")

+9

這種事情不是由於內存管理的原因。 – user2357112

+1

僅限常量的類是反模式。不要這樣做。相反,把你的常量放在它們所屬的類中。例如,[Pattern.DOTALL](http://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html#DOTALL),而不是PatternConstants.DOTALL。 – VGR

回答

1

這不是效率;這涉及可維護性。

該常數在一個地方定義值"name",並將常數名稱(您選擇NAME)與它相關聯。

在你的例子中,常數名不會告訴我們任何東西。但它可能是,例如,public static String FIRST_NAME_FIELD = "name"。然後,在Constants類和每次使用中都會更清楚地知道字符串"name"的含義。

而且,當然,如果您稍後需要將"name"更改爲"first_name",則更容易。

3

其中一個原因是重用它(並因此防止錯誤發生)。

如果您正在使用IDE,那麼以比純字符串搜索更不含糊的方式執行使用情況查找變得更加容易。

另一個在評論中已經提到,將是記憶,但正如我所看到的,以上兩個原因更爲重要 - 一般用法。我的不好。 Looks like memory has not much to do with it - atleast in case of static-final fields

+0

除了最後一段,我想補充一點。它與記憶無關,對它幾乎沒有影響。它的唯一作用是組織和可維護性。絕對不希望開始Java程序員開始將其所有常量放在不適當的情況下的專用文件中,因爲他們認爲它會以某種方式影響性能! –

+0

我想你是對的。 –

1

性能方面,java傾向於在字符串池中重用字符串。

常數通常用於知道值不會改變或不能被其他人改變的情況。

對於恆定必須添加final你變量聲明:

public static final String NAME="name"; 

常量是更關係到更好的編碼,組織和重用,而不是性能。

相關問題