Мне кажется, я понял, что происходит:
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
и
- это плохая идея, игнорировать или поворачивать
от общей безопасности типов компилятора
предупреждения