【发布时间】:2020-04-22 20:50:57
【问题描述】:
我想出了这个场景,但无法理解其背后的逻辑? 我只看懂了第一个,剩下的两个看不懂?请解释它在内部是如何工作的?
public class Test {
public static void main(String[] args) {
String s = "Karan";
Object o = "Karan";
System.out.println(s.equals(o)); // True
System.out.println(o.equals(s)); // True
System.out.println(s == o); // True
}
}
【问题讨论】:
-
因为两者都是字符串字面量并且指向字符串常量池中的相同引用
-
没有“对象文字”,两者都是字符串文字(由于字符串常量池被解析为同一个实例),一个恰好被分配给类型为
Object的变量而不是String。然而,对象本身仍然是String。 -
你能再精确一点吗?究竟是什么令人困惑,为什么?
-
"但我们正在创建对象类型的字符串" 不,在
Object o = "Karan";的情况下,我们正在创建(或实际上从字符串常量池重用)字符串类型的 object 和我们将 reference 存储在 Object 类型的 variable 中。 -
@MandarDharurkar 不,这不是重复的。
标签: java string object equals string-literals