Pom*_*rio 1 java string-comparison
我有以下测试:
public class EqualityTest
{
String one = new String("Hello world");
String two = new String("Hello ") + new String("world");
@Test
public void testStringPool()
{
assertFalse(one == two); // FALSE!!!
assertTrue(one.equals(two));
assertTrue(one.intern().equals(two.intern()));
}
}
Run Code Online (Sandbox Code Playgroud)
我原以为由于Java的字符串池特性,VM会分配一个和两个指向池中相同的字符串.在这种情况下,为什么我的理解错了?
Jon*_*eet 10
我原以为由于Java的字符串池特性,VM会分配一个和两个指向池中相同的字符串.
只有字符串常量会自动实现.所以如果你的代码是:
String one = "Hello world";
String two = "Hello " + "world";
Run Code Online (Sandbox Code Playgroud)
......然后one和two将有同样的价值.因为您已经使用过new String(...),所以这些表达式不是常量表达式,因此它们不会被实现.(当然,文字仍然是实习的......但不是从文字创建的字符串.)
有关什么算作常量表达式的详细信息,请参见JLS的第15.28节.
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |