Java 对于每个语法强制转换
有人能告诉我这是怎么回事吗?在我看来,myObj被转换为String[],因此可以在for循环中对其进行迭代。但它被构造为新字符串[]——为什么需要对其进行强制转换Java 对于每个语法强制转换,java,Java,有人能告诉我这是怎么回事吗?在我看来,myObj被转换为String[],因此可以在for循环中对其进行迭代。但它被构造为新字符串[]——为什么需要对其进行强制转换 public static void main(String args[]) { Object myObj = new String[]{"one", "two", "three"}; for (String s : (String[])myObj) { System.out.print(s + ".");
public static void main(String args[]) {
Object myObj = new String[]{"one", "two", "three"};
for (String s : (String[])myObj) {
System.out.print(s + ".");
}
}
谢谢 它被创建为
字符串[]并不重要。
;您只有一个对象
对它的引用。这与每个人无关;以下内容也无法编译:
Object myObj = new String[]{"one", "two", "three"};
System.out.println(myObj.length); // There is no Object.length
为什么不将数组声明为实际类型?像这样:
Syting[] myObj = new String[]{"one", "two", "three"};
这样,强制转换就没有必要了。当您将
myObj
声明为Object
时,您告诉它忘记它是其他类型。外观类型和实际类型之间存在差异。objectmyobj[]语句告诉Java您正在声明一个对象数组。在编译时,这是Java感兴趣的唯一类型。稍后,当您尝试访问数组元素时,Java假定为对象,而不是其他对象。该字符串称为实际类型,在运行时仅为“已知”。因此进行强制转换的原因。在编译时检查您试图迭代的对象的类型。在编译时,唯一可用的信息是声明的变量类型。编译器无法[可靠地,总是]找出您实际上在那里放了一个字符串[](谷歌“暂停问题”来了解原因)。运行时类型信息用于多态性、类型转换,可能还有其他我目前无法想到的事情。因为它被声明为
对象