【发布时间】:2016-03-22 05:22:57
【问题描述】:
String s = "Hi Hello Hola";
String[] d = s.split(" ");
System.out.println(d[0] == "Hi"); // prints false
String[] e = { "Hi", "Hello", "Hola" };
System.out.println(e[0] == "Hi"); // prints true
这里我们有一个数组d,其值为Hi、Hello和Hola。我们有另一个数组 e 具有相同的一组值。
但是为什么这种比较的行为会有所不同呢?为什么它打印的是假然后是真的?
我预计两者都是错误的!因为我们使用==比较字符串文字值和字符串值。
为什么会有这种差异?
更新这里我的问题不是关于字符串值的比较。我知道比较引用的== 和比较字符串内容的equals() 之间的区别。
从答案中,我了解到在第二种情况下,Hi 值被实习并引用同一个对象。但在另一种情况下, split 会在不检查文字池的情况下创建新值。这样对吗?我错过了什么吗?
【问题讨论】:
-
在网站上快速搜索一下,在询问之前,会是一个好主意,有很多类似的问题..