2015-01-21 40 views
-4

僞代碼:Java的String,如果+包含+循環

In Loop for n-iterations { 
    // I am doing a check below 
    if (params.contains("test") { 

    } 
} 

將字符串test被創建爲對象n次?

+3

否。會爲''test「'創建一個字符串實例。實際上Java對緩存和重用'String'實例相當積極。有關進一步的討論,請參閱:http://stackoverflow.com/questions/3801343/what-is-string-pool-in-java – aroth 2015-01-21 12:24:57

回答

4

號。"test"是一個字符串字面,所以它進入字符串常量池並將於重用未來所有「測試」的訪問。如果你做new String("test")(創建字符串的錯誤方式),那麼會創建字符串「測試」的幾個實例 - 每個迭代一個

+0

另外值得注意的是,任何其他輸出代表「test」的String對象的方法幾乎都是一定要創建其他實例。 – 2015-01-21 12:40:38

+0

@JRichardSnape - 這取決於..例如,如果你在''test''上調用'trim()',那麼同樣的''test''實例將被返回。 – TheLostMind 2015-01-21 12:56:59

+1

絕對 - 因此「幾乎」確定。說實話,它有點偏離了確切的問題。它可能是一些討厭的「陷阱」的來源,因此我的評論,但你已經回答了這個問題。 – 2015-01-21 12:59:17

3

編號"test"是一個獨特的對象,存儲在字符串池中。因此,它甚至與您在應用程序中其他位置可能具有的任何其他"test"字面相同。