2013-03-21 75 views
0

Java在其Java7中引入了帶有Strings的開關盒。我想知道如果使用這種開關情況會造成垃圾。開關盒用Java中的字符串 - garbagy?

例如,在我的程序,

String s = getString(); 
switch(s) 
{ 
    case ABC: // ABC is a final static constant 
    ... 
    case CDE: // CDE is also final static constant. 
    ... 
} 

java中如何執行該開關的情況。假設有10個這樣的開關盒。它會在每次匹配string scase ABC等時創建一個新字符串嗎?

如果是這樣的話,那是非常garbagy的,所以當我給100個case的switch case時,每次100個字符串都會被創建。

+0

有沒有理由需要創建任何額外的字符串來做到這一點,被檢查的字符串和被比較的字符串(你的常量)都已經被定義和緩存在perm gen空間中。 – Adrian 2013-03-21 16:15:44

+2

爲什麼你認爲它會創建一個新的字符串? – blank 2013-03-21 16:19:18

回答

5

如果案例值是常量,那麼相同的規則適用於類常量池,就好像它根本不在case語句中一樣。

這是一個good answer to a similar question它可能會幫助你。

+2

案例值必須是常量 - 否則將不會編譯。 – assylias 2013-03-21 16:30:48

+0

哦,是的,好點,只是測試。 – James 2013-03-21 16:33:04