Java将差异数组转换为变量

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

我正在学习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。误解的地方是,两个我
已进行强制转换操作,但仅抛出一个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是的,这听起来是个好主意。但你为什么要告诉我?