我正在尝试将两个对象转换为整数,添加它们,然后将它们转换回对象并将它们存储在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的赋值语句有关。为什么它们仍然以整数形式出现?
答案 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
。