Java将差异数组转换为变量
我正在学习OCA考试,有什么东西淹没了我的吸引力。如果我做那样的演员Java将差异数组转换为变量,java,casting,classcastexception,Java,Casting,Classcastexception,我正在学习OCA考试,有什么东西淹没了我的吸引力。如果我做那样的演员 Object[] arr = new Object[] { 10, "OZAN", 15.0, 12.5f }; String s = (String) arr[1]; 一切都会好的。 但是如果我尝试那段代码 Object o = new Object(); Integer i = (Integer) o; 它将抛出ClassCastException。误解的地方是,两个我 已进行强制转换操作,但仅抛出一个ClassCas
Object[] arr = new Object[] { 10, "OZAN", 15.0, 12.5f };
String s = (String) arr[1];
一切都会好的。
但是如果我尝试那段代码
Object o = new Object();
Integer i = (Integer) o;
它将抛出ClassCastException。误解的地方是,两个我
已进行强制转换操作,但仅抛出一个ClassCastException。出现这种情况的原因是什么?谢谢大家。区别在于对象的真实性
如果您没有对象o=新整数5;例如,它不会抛出ClassCastExecOption。这是因为o不是整数,它是一个对象,而arr[1]是一个字符串。它也是一个对象,但也是一个字符串,允许对其进行强制转换。直接从API规范: 抛出以指示代码试图将对象强制转换为 它不是其实例的子类 您可以使用instanceof关键字,它是一个二进制运算符,用于测试对象实例是否是给定类型的子类型 让我们举例说明一下
class Test {
public static void main(String[] args) {
Object o = new Object();
Object i = 5; // auto-boxing
Object[] arr = new Object[] { 10, "Acar çalış ozan", 15.0, 12.5f };
if (arr[1] instanceof String)
System.out.println("arr[1] is an instance of String");
if (i instanceof Integer)
System.out.println("i is an instance of Integer");
if (o instanceof Integer) {
System.out.println("o is an instance of Integer");
}
else
System.out.println("o is NOT an instance of Integer");
}
}
您必须将两种不同的东西分开: 引用的类型 引用引用的对象的类型 arr[1]引用类型是Object,它引用String类型的对象OZAN,因此允许使用强制转换字符串arr[1] o引用类型是Object,它引用Object类型的Object new Object 因此,指令Integer o尝试将object类型的对象转换为Integer类型,该类型称为向下转换为子类型。
在Java中根本不允许向下转换,在运行时生成ClassCastExecOption我建议大家复习一下转换的基本原理,向下转换/向上转换。这是遗传和多态性的原理。您的答案将变得清晰,了解对象位于java继承层次结构的最高级别。Bu aradaönce ki sorularınıinceledim verilen cevaplar doğru olmasına rağmen Onayramıssın,sol tarafta ki sayının altında ki tike tıklayarak Onayalayabilisin。在第一种情况下,您铸造了一个对象引用,指向一个字符串,指向一个字符串。这是一根线,所以这很好。在第二种情况下,将指向对象的对象引用强制转换为整数。它不是一个整数,所以失败了。@AndyTurner<实际上,他应该了解多态性是什么以及它是如何工作的,先生。@snr是的,这听起来是个好主意。但你为什么要告诉我?