我了解到它来自魔鬼,==而不是测试字符串相等String.equals(),因为每个String都是对它自己的对象的引用.
但如果我使用类似的东西
System.out.println("Hello" == "Hello");
Run Code Online (Sandbox Code Playgroud)
它打印真实.
为什么?
Jon*_*eet 26
它没有.这仍然是一件坏事 - 你仍然会测试引用相等而不是值相等.
public class Test
{
public static void main(String[] args)
{
String x = "hello";
String y = new String(x);
System.out.println(x == y); // Prints false
}
}
Run Code Online (Sandbox Code Playgroud)
如果您现在看到==测试"工作",那么这是因为您真正拥有相同的参考.看到这个的最常见原因可能是由于String文字的实习,但这是在Java中永远存在的:
public class Test
{
public static void main(String[] args)
{
String x = "hello";
String y = "hel" + "lo"; // Concatenated at compile-time
System.out.println(x == y); // Prints true
}
}
Run Code Online (Sandbox Code Playgroud)
这由Java语言规范的第3.10.5节保证:
每个字符串文字都是类String(第4.3.3节)的实例(第4.3.1节,第12.5节)的引用(第4.3节).String对象具有常量值.字符串文字 - 或者更一般地说,作为常量表达式(第15.28节)的值的字符串 - 是"实例化"以便使用String.intern方法共享唯一实例.
| 归档时间: |
|
| 查看次数: |
946 次 |
| 最近记录: |