2015-01-21 36 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"字面相同。