说:
String str = "hello";
Object obj = str;
System.out.println(str==obj);
结果是真的,因为它指向内存中的相同对象,这是有道理的。但如果我说:
obj.indexOf("h");
或任何子类方法,我得到“找不到符号”。它们仍然指向同一个对象,那么在编译时会发生什么使得不同类型的引用对象彼此不同呢?
答案 0 :(得分:3)
Object
类型引用只知道属于其公共接口的方法。
如果您知道Object
引用是String
类型,则必须进行投射:
int index = ((String) obj).indexOf("h");
答案 1 :(得分:0)
苹果和梨。
身份检查==在运行时执行。有效而且很好。
构造obj.indexOf...
是编译时错误,因为类Object没有方法indexOf
如果你告诉编译器(通过强制转换)obj包含一个String,你可以得到有效的代码
((String)obj).indexOf("h");
将再次编译