日期:2014-05-20  浏览次数:20807 次

JDK 1.5 参数列表问题!

int[] a1 =new int[]{1,2,3};
String[] a2 = new String[]{"a", "b", "c"};
System.out.println(Arrays.asList(a1));
System.out.println(Arrays.asList(a2));

outPut:


[[I@de6ced]
[a, b, c]

这里,a1 按照 JDK1.5  的方式运行,
我想问的是,参数列表中,asList(T... a)
是不是多个元素当成“1”个 Object哈?
因为我运行
int[] a3 = new int[]{2};
System.out.println(Arrays.asList(a3))
outPut 的格式和 a1 的输出格式是一样的。
------最佳解决方案--------------------
引用java编程思想的说法,Arrays.asList在底层还是数组,所以不能调整大小,add()这类不能用很正常(返回一个受指定数组支持的固定大小的列表 引自jdk 6.0中文文档)
还有Integer类自身没有toString的实现,而String类型有
------其他解决方案--------------------
首先讲解T... a
类型后加三个点代表可变参数(数量可变)
T是泛型

例子:

public static void main(String[] args) {
System.out.println(add1(1, 2, 3, 4, 5)); //可以继续加参数
System.out.println(add1(new int[]{1, 2, 3, 4, 5})); //其实参数n就是个数组啦,是个语法糖,某个版本才加的新特性,可以用两种方式调用
System.out.println(add2(new int[]{1, 2, 3, 4, 5})); //这个方法就只能传数组了,是老语法
//System.out.println(add2(1, 2, 3, 4, 5));  //这个就不能用可变参数方式调用了
}

public static int add1(int... n) {
int result = 0;
for(int i : n)
result += i;
return result;
}

public static int add2(int[] n) {
int result = 0;
for(int i : n)
result += i;
return result;
}


接下来讲Arrays.toList
这个方法作用,将数组转换成List
但请注意,List中只能存储对象类型的元素,不能存基本类型
举个例,能存Integer,不能存int!!!
如果你这么调用List list = Arrays.toList(new int[]{1, 2, 3})
意思就是将元素为int型的数组转换成元素为int型的List
很显然,它没法转,因为int是基本类型,不是对象
虽然这么做这个方法不会报错,且也会返回一个List对象给你,但这个对象是无效的,是不能用的,是错误的
你可以测试list.add(1)或者list.get(0),是会报错滴



------其他解决方案--------------------
        int[] data = {1,2,3};
        java.util.List<?> l = java.util.Arrays.asList(data);
        System.out.println(l);
        System.out.println(java.util.Arrays.toString((int[])l.get(0)));

------其他解决方案--------------------
引用:
首先讲解T... a
类型后加三个点代表可变参数(数量可变)
T是泛型

例子:
Java code123456789101112131415161718192021public static void main(String[] args) {        System.out.println(add1(1, 2, 3, 4, 5)); //可以继续加参数 ……

我有想过加的应该是 对象哈,list.add(1),get(0)都没有错的,
我想的是 AutoBoxing,自动装箱···
------其他解决方案--------------------
引用:
首先讲解T... a
类型后加三个点代表可变参数(数量可变)
T是泛型

例子:
Java code123456789101112131415161718192021public static void main(String[] args) {        System.out.println(add1(1, 2, 3, 4, 5)); //可以继续加参数 ……

我觉得前面大侠说的蛮好的,我觉得增加的应该是 对象,而 int[]数组整个是对象,里面不是对象。我觉得这样了解好点,谢谢了,况且 打印 是一个对象:[[I@de6ced] ,不是间隔的多个对象。