我知道 == 运算符检查相等的引用(地址),但我没有得到编译器在比较Thread和String对象时如何抛出以下错误。
java: incomparable types: java.lang.Thread and java.lang.String
这是我的代码:
public static void main(String[] args) {
Thread t = new Thread();
Object o = new Object();
String s = new String("");
System.out.println(t == o);//no issues here
System.out.println(t==s);// but this throws above error
}
Run Code Online (Sandbox Code Playgroud)
为什么它允许在ThreadandObject但不允许Thread和之间进行比较String?
Pro*_*man 15
指定比较不能在它们之间转换的引用类型必须导致编译错误。请参阅JLS 第 15.21.3 章:
15.21.3. 引用相等运算符 == 和 !=
[...]
如果无法通过强制转换(第 5.5 节)将任一操作数的类型转换为另一个操作数的类型,则会出现编译时错误。两个操作数的运行时值必然不相等(忽略两个值都为空的情况)。
nit*_*.kk 11
虽然@Progman 已经很好地回答了它,但我想换个角度来看待它。
Thread extends Object, 因此说Object o = new Thread()
Now是有效的String extends Object,但String不扩展Thread因此String iDoNotComplie = new Thread()无效。
现在,如果我们有Thread t = new Thread()那么如果我们有类型的引用Object,o 和类型的另一个参考String,s那么它可能是o实际上是指的一个对象Thread,但它不可能s永远参考的对象Thread。这可以o==s工作,o==t也可以工作,但s==t不起作用,因为它根本无法编译。
| 归档时间: |
|
| 查看次数: |
245 次 |
| 最近记录: |