用对象类型转换

时间:2015-11-09 21:52:02

标签: java casting

我正在尝试将两个对象转换为整数,添加它们,然后将它们转换回对象并将它们存储在Object数组中。我尝试将对象添加回数组时,我得到了一个数组存储异常。

Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();
str = str.replaceAll("[^0-9]+", " "); 
Object[] numbersArray = Arrays.asList(str.trim().split(" ")).toArray();
str = scanner.nextLine();
str = str.replaceAll("[^0-9]+", " "); 
Object[] translateArray = Arrays.asList(str.trim().split(" ")).toArray();

for (int i = 0; i < numbersArray.length; i+=2) {
     Object x = (Object) (Integer.parseInt(numbersArray[i].toString()) 
                   + Integer.parseInt(translateArray[0].toString()));
     Object y = (Object) (Integer.parseInt(numbersArray[(i+1)].toString()) 
                   + Integer.parseInt(translateArray[1].toString()));

     System.out.println(x.getClass().getName()); //how is this an integer???
     System.out.println(y); //values get added correctly...
     numbersArray[i] = (Object) x;
     numbersArray[i+1] = (Object) y;
  }

正如你可能看到的那样,我试图尽可能地抛出Object类型,但numbersArray拒绝接受它。我认为我的问题与对象x和y的赋值语句有关。为什么它们仍然以整数形式出现?

2 个答案:

答案 0 :(得分:4)

numbersArray实际上是String[]。这是因为String.split()只需在包装好的数组上调用String[]即可返回Arrays.asList(array).toArray()clone()

因此,当您尝试在Integer中存储String[]时,您会获得ArrayStoreException

如果您想获得真实Object[],可以

List<String> list = Arrays.asList(str.trim().split(" "));
Object[] numbersArray = list.toArray(new Object[list.size()]);

但是,我会考虑改变你的设计。首先使用Object[]存储String,然后使用Integer,可能会导致混淆和错误。

答案 1 :(得分:1)

保罗已经回答了你的主要问题,让我回答你的子问题

  

的System.out.println(x.getClass()的getName()); //这是怎么回事   整数???

如果您运行以下简单代码:

Object o = 45;
System.out.println(o.getClass().getName());

它会为您提供java.lang.Integer,因为引用可能是Object类型,但实际值是Integer