我正在使用Netbeans。
当我运行下面的程序时,我将其作为输出[I@de6ced
!怎么样?
import java.util.Arrays;
import java.util.Vector;
public class Test {
public static void main (String[] args) {
int[] a = new int[1];
a[0] = 5;
Vector<Integer> a1 = new Vector(Arrays.asList(a));
System.out.println(a1.elementAt(0));
}
}
我也试过解决它,但后来我得到了一个
线程“main”中的异常java.lang.ClassCastException:[我无法转换为java.lang.Integer 在TopCoder.Test.main(Test.java:13) Java结果:1
public static void main (String[] args) {
int[] a = new int[1];
a[0] = 5;
Vector<Integer> a1 = new Vector(Arrays.asList(a));
int b = a1.elementAt(0); /* EXCEPTION THROWN HERE */
System.out.println(b);
}
答案 0 :(得分:6)
[I@de6ced
可以细分为:
- [
数组
- I
整数
- de6ced
使用此引用哈希代码(在Sun Java中,基本上是参考)
toString()返回类似ClassName @ HashCode的东西,这正是你在这里发现的(相当奇怪的)原始数组类。
问题是<T> List<T> asList(T...)
方法推断出错误的类型。将代码更改为使用Integer[]
而不是int[]
。这是int是原始的结果,但int []是一个对象。
您可以直接看到:
System.out.println(Arrays.asList(new int[]{5}));
=&GT; [[I@
一些参考
System.out.println(Arrays.asList(new Integer[]{5}).get(0));
=&GT; 5
答案 1 :(得分:2)
Integer[] a = new Integer[1];
a[0] = new Integer(5);
List list = Arrays.asList(a);
System.out.println(list.get(0));
以上工作正如您所期望的那样。
因此看起来“int”数组被视为Object而不是Integers数组。换句话说,自动拳击似乎不适用于它?
答案 2 :(得分:0)
我想我已经弄清楚发生了什么:
int[] a = new int[1];
a[0] = 5;
我们现在有一个int数组。
Vector<Integer> a1 = new Vector(Arrays.asList(a));
问题在于您调用Arrays.asList
的方式。
asList的签名是“public static <T> List<T> asList(T... a)
”。它不适用于T == int
,因为int
不是对象类型。它与T == Integer
不匹配,因为数组a
的基本类型为int
而不是Integer
。实际发生的是T
绑定到int[]
,Arrays.aslist(a)
返回List<int[]>
,其中一个元素是a
的值!
然后,您从Vector
创建一个List
并获得一个Vector
,其中包含一个元素...原来的int[]
已分配给'a'。
System.out.println(a1.elementAt(0));
最后,a1.elementAt(0)
抓取int[]
,最后调用Object
方法的toString()
实现。
从中学到几个重要的教训:
a1
和答案 3 :(得分:-1)
看起来int正在变成使用自动装箱的整数,所以你得到一个对象引用而不是值。仍然看起来很奇怪,因为它应该调用正确的toString并最终得到“5”。