Java 中不同类型的引用对象有什么不同吗?
Are reference objects with different types any different in Java?
当说:
String str = "hello";
Object obj = str;
System.out.println(str==obj);
结果为真,因为它指向内存中相同的对象,这是有道理的。但是如果我说:
obj.indexOf("h");
或任何子类方法,我得到 "cannot find symbol"。它们仍然指向同一个对象,那么在编译期间发生了什么使不同类型的引用对象彼此不同?
Object
类型引用只知道属于其 public 接口的方法。
如果您知道 Object
引用是 String
类型,则必须进行转换:
int index = ((String) obj).indexOf("h");
苹果和梨。
身份检查 == 在运行时执行。有效且良好。
构造 obj.indexOf...
是一个 编译时错误 因为 class 对象只是没有方法 indexOf
如果你告诉编译器(通过转换的方式)obj 包含一个字符串,你可以获得有效代码
((String)obj).indexOf("h");
将再次编译
当说:
String str = "hello";
Object obj = str;
System.out.println(str==obj);
结果为真,因为它指向内存中相同的对象,这是有道理的。但是如果我说:
obj.indexOf("h");
或任何子类方法,我得到 "cannot find symbol"。它们仍然指向同一个对象,那么在编译期间发生了什么使不同类型的引用对象彼此不同?
Object
类型引用只知道属于其 public 接口的方法。
如果您知道 Object
引用是 String
类型,则必须进行转换:
int index = ((String) obj).indexOf("h");
苹果和梨。
身份检查 == 在运行时执行。有效且良好。
构造 obj.indexOf...
是一个 编译时错误 因为 class 对象只是没有方法 indexOf
如果你告诉编译器(通过转换的方式)obj 包含一个字符串,你可以获得有效代码
((String)obj).indexOf("h");
将再次编译