T in List<T> should be some subtype of java.lang.Object , which int not. Only a different interpretation is used, since we use ... that you supply an array of int[] , that is, int[][] . So you get List<int[]> .
String is a subtype of Object , so this works as expected. Also the only way it can work before introducing varargs in J2SE 5.0. Typically, the interpretation of existing code should not be changed between language versions.
Now, if you want a List<Integer> , you can go through and put each integer. If your program has a lot of these elements, then a memory problem may arise. You can use a third-party library that compactly supports List<Integer> with int[] , or just stick with arrays for primitives. It is regrettable that Java does not support value types.
source share