【问题标题】:Accessing integers from an object of class Object从 Object 类的对象访问整数
【发布时间】:2014-11-26 04:46:02
【问题描述】:

在下面的代码中,一个整数数组被分配给一个对象。如果可以,为什么我不能通过 obj 访问它们?代码编译,但我得到一个 ClassCastException,我尝试将对象转换为 String,我得到同样的错误

public class test
{ public static void main(String ab[])
  { 
   Object obj = new int[] {1,2,3,4,5,6,7,8,9,10};
   Integer[] i = (Integer[]) obj;
   for( Integer c : i)    
   System.out.println(c);       
  }
}

【问题讨论】:

    标签: java arrays object int


    【解决方案1】:

    int[]Integer[] 不同。

    你创建一个int[]:

    Object obj = new int[] {1,2,3,4,5,6,7,8,9,10};
    

    但随后您尝试将其转换回Integer[],这是您无法做到的,因为它是int[]int[]Integer[] 都是 Object,但你不能像这样在两者之间进行转换,原因相同,例如,这不起作用:

    Object obj = new String("");
    File f = (File)obj; // obj is a String, will throw ClassCastException
    

    相反,要么创建一个 Integer[] 开头:

    Object obj = new Integer[] {1,2,3,4,5,6,7,8,9,10};
    Integer[] i = (Integer[]) obj;
    

    或者使用int[]:

    Object obj = new int[] {1,2,3,4,5,6,7,8,9,10};
    int[] i = (int[]) obj;
    

    您尝试将int[] 转换为String 也是如此。你不能仅仅通过在 Java 中转换它们来转换它们。

    【讨论】:

      【解决方案2】:

      这是因为您试图将 int[] 类型的对象转换为 Integer[] 类型的对象,这是不可能的,尽管 Integer 类可以保存 int 类型,并且在更高版本的 java 中您甚至可以分配像这样将 int 转换为 Integer:

      Integer a = 2;
      

      它们是不同的。

      如果您使用的是 java 5 或更高版本,您可以执行以下操作:

      public class test
      { public static void main(String ab[])
        { 
         Object obj = new Integer[] {1,2,3,4,5,6,7,8,9,10};
         Integer[] i = (Integer[]) obj;
         for( Integer c : i)    
         System.out.println(c);       
        }
      }
      

      【讨论】:

        猜你喜欢
        • 2015-01-12
        • 2011-06-05
        • 1970-01-01
        • 1970-01-01
        • 2019-08-28
        • 1970-01-01
        • 1970-01-01
        • 2017-09-13
        • 1970-01-01
        相关资源
        最近更新 更多