java可变参数案例

import java.util.Arrays;
public class Test {
    public static void main(String ... args) {
        fun();	// 输出:change param method:[],编译后:fun(new int[0]);
        fun(1);	// 输出:change param method:[1],编译后:fun(new int[] { 1 });
        fun(1, 2);	// 输出:two param method:1,2,编译后:fun(1, 2);
        fun(1, 2, 3);	// 输出:change param method:[1, 2, 3],编译后:fun(new int[] { 1, 2, 3 });
		/* 结论:
			优先级:固定个数参数 > 可变参数
			可变参数调用处在编译时参数会被编译为数组
		*/


        fun(1, new int[]{2, 3});	// 输出:array param method:1,[2, 3],编译后: fun(1, new int[] { 2, 3 });
        fun("11", new int[]{2, 3});	// 输出:array2 param method:11,[2, 3],编译后: fun(11, new int[] { 2, 3 });
        // fun("11", 2, 3, 4);	// 编译报错
		/* 结论:
			数组参数不可传递 类似 2,3,4 的参数(编译报错)
		*/

        fun2(); // 输出:fun2:[],0
        // 可变参数在不传值时不会为null,而是空数组
        // 可变参数兼容数组参数的特性(可变参数调用处在编译时参数会被编译为数组或调用出直接传数组),且接收后的参数为数组类型
    }

    public static void fun(int i, int j) {
        System.out.println("two param method:" + i + "," + j);
    }

    public static void fun(int i, int[] intArray) {
        System.out.println("array param method:" + i + "," + Arrays.toString(intArray));
    }
    public static void fun(String s, int[] intArray) {
        System.out.println("array2 param method:" + s + "," + Arrays.toString(intArray));
    }

    // public static void fun(int[] intArray) {}	// 报错,不能和可变参数共存
    public static void fun(int... intArray) {
        System.out.println("variable param method:" + Arrays.toString(intArray));
        // for(int i : intArray) {
        // 	System.out.println(i);
        // }
        System.out.println("is array:" + (intArray instanceof int[]));
    }

    public static void fun2(int... arr) {
        System.out.println("fun2:" + Arrays.toString(arr) + "," + arr.length);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值