为什么这个打印真实:
String sOne = new String();
sOne = "one";
String sTwo = new String();
sTwo = "one";
System.out.println(sOne == sTwo ? "true": "false");
Run Code Online (Sandbox Code Playgroud)
但这打印错误:
String sOne = new String("one");
String sTwo = new String("one");
System.out.println(sOne == sTwo ? "true": "false");
Run Code Online (Sandbox Code Playgroud)
他们不应该打印假吗?...我明白字符串是不可变的,但我不明白为什么不用构造函数初始化导致不同的输出
因为文字"one"在任何地方引用相同的String对象 ; 字符串文字总是被实习.第一个示例中的两个变量将引用同一个对象.
在第二种情况下,您强制在两个赋值中构造一个新的字符串对象,因此字符串相等但是不同的实例; 这两个变量引用等价但不同的对象.
表达式sOne.equals(sTwo)应该在两个示例中都返回true,因为它将对字符串内容执行相等测试.
| 归档时间: |
|
| 查看次数: |
117 次 |
| 最近记录: |