JDK5-可变参数(类型转换问题)

2016-12-23  本文已影响0人  Josaber

形如:public void function(int arg, int... args)
可变参数隐式地创建一个数组
注意:可变参数必须出现在参数列表的最后,否则使用数组

分析以下程序:

public class VarParameter {

    public static void main(String[] args) {
        printArr(1, 2, 3);
        printArr(new Integer[] { 1, 2, 3 });
        printArr(new int[] { 1, 2, 3 });
        printArr("1", "2", "3");
        printArr(new String[] { "1", "2", "3" });
        printArr(new Object[] { new String[] { "1", "2", "3" } });
        printArr((Object) new String[] { "1", "2", "3" });
    }

    private static void printArr(Object... args) {
        System.out.println(args.length);
    }
}

输出结果为:

3
3
1
3
3
1
1

分析:

  1. 传递参数为1,2,3时,隐式地构造args = new Object[]{1, 2, 3};
  2. 传递参数为new Integer[]{1,2,3}时,隐式地将Integer[]转变为Object[]
  3. 传递参数为new int[]{1,2,3}时,将int[]转变为Object,因此Object数组的长度只有一(基本类型无法直接转变为Object)
  4. 传递参数为"1","2","3"时,隐式地构造args = new Object[]{"1", "2", "3"};
  5. 传递参数为new String[]{"1", "2", "3"}时,隐式地将String数组转变为Object数组
  6. 传递参数为new Object[] {new String[]{"1", "2", "3"}}时,将String数组作为Object数组的一个元素进行传递
  7. 传递参数为(Object)new String[]{"1", "2", "3"}时,强制地将String数组转变为Object类型(数组的Superclass为Object

再分析一个:

import java.util.Arrays;
import java.util.List;

public class VarParameter {

    public static void main(String[] args) {
        List list = Arrays.asList(new int[]{1,2,3});
        System.out.println(list.size());
    }
}

同样的道理,本程序的输出结果也为1。

上一篇 下一篇

猜你喜欢

热点阅读