Java不定长参数使用的一个坑

平常很少用到不定长参数,这次接触这个东西也是因为在数组转换列表时遇到的一个坑。

废话不多说,直接上代码:

    public static void main(String[] arg0) {
        /**
         * 基本数据类型数组
         */
        int[] intNum = {1,2,3,4};
        /**
         * 包装类类型数组
         */
        Integer[] integerNum= new Integer[]{1, 2, 3, 4};

        System.out.println("基本数据类型数组");
        setArray(intNum);
        System.out.println("包装类数据类型");
        setArray(integerNum);
    }

    public static <T> void setArray(T... number) {
        System.out.println("number长度"+number.length);
        for(Object asd : number ){
            System.out.println(asd);
        }
    }

输出结果:

6STT4D0N~8UZGEVII%%PXW4.png

不定长参数的本质是数组实现的,可以直接去传数组。上面的代码中就是直接传递的数组,结果的区别很明显。在传递基本数据类型数组时,整个数组直接被当作了一个整体,输出的也是数组的地址,参数number的长度为1,但是当参数是包装类类型数组时,就能正确的输出内容,并且参数number的长度也为4。为了比较,也用了其他的基本类型和对象类型的数据进行测试,结果无一不和上面的结果一致。
综上所述,可以很肯定的说:

不定长参数在使用数组传参时,一定要注意不能是基本类型数据的数组,只能是对象类型数据的数组,比如基本数据类型的包装类。

原因不知道,记录在此,权当提醒

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容