Java中的可变参数使用方法

可变参数

  • 在 Java 5 中提供了变长参数,允许在调用方法时传入不定长度的参数。变长参数是Java的一个语法糖,本质上还是基于数组的实现

void fun(String... args);

void fun(String[] args);

方法定义

在定义方法时,在最后一个形参后加上三点“…“,就表示该形参可以接受多个参数值,多个参数值被当成数组传入。上述定义有几个要点需要注意:

  • 可变参数只能作为函数的最后一个参数,但其前面可以有也可以没有任何其他参数

  • 由于可变参数必须是最后一个参数,所以一个函数最多只能有一个可变参数

  • Java的可变参数,会被编译器转型为一个数组

  • 变长参数在编译为字节码后,在方法签名中就是以数组形态出现的。这两个方法的签名是一致的,不能作为方法的重载。如果同时出现,是不能编译通过的。可变参数可以兼容数组,反之则不成立

代码实现

public class Demo {

    //求若干个整型数中的最大值
    public int getMax(int... items){       //定义可变参数items

        int max = Integer.MIN_VALUE;       //次数为int能表示的最小值,值为-2147483648
        for(int item : items){
            max = item > max? item : max;    //取大值
        }
        return max;
    }
    //返回比number大的数的个数
    public int getLagerNum(int number,int... items){  //若除了可变长参数还有其它参数,可变长参数一定要放在最后
        int sum = 0;
        for(int item : items){
            if(item > number){
                sum++;
            }
        }
        return sum;
    }

    public static void main(String[] args) {
        Demo vp = new Demo();
        System.out.println("最大值:"+vp.getMax());  //可以不写参数
        System.out.println("最大值:"+vp.getMax(2,1,4,7,2,-1,3,3));  //可以在参数中直接写入若干个参数
        System.out.println("最大值:"+vp.getMax(-1,4,5,0,1));        //可以在参数中直接写入若干个参数

        System.out.println("比number大的数的个数:"+vp.getLagerNum(9, 1,11,5,14,-1,9,21));  //9为number,后边的是items
        int a[] = new int[] {1,11,5,14,-1,9,21};
        System.out.println("比number大的数的个数:"+vp.getLagerNum(9,a));     //items也可以用数组替代

    }

}
/*
最大值:-2147483648
最大值:7
最大值:5
比number大的数的个数:3
比number大的数的个数:3
*/

注意

  1. 在方法中定义可变参数后,我们可以像操作数组一样操作该参数;

  2. 如果该方法除了可变参数还有其它的参数,可变参数必须放到最后;

  3. 调用使用了可变参数的方法时: 
    a. 可以不写参数,即传入空参; 
    b. 可以直接在里边写入参数,参数间用逗号隔开; 
    c. 可以传入一个数组;

    public class Demo {  
    
        public void comp(int... items){  
            System.out.println("1");  
        }  
    
        public void comp(int item1,int item2){  
            System.out.println("2");  
        }  
    
        public static void main(String[] args) {  
            Demo vp = new Demo();  
            vp.comp(1, 2);  
    
        }  
    
    } 
    /*
    2
    */

     

  4. 拥有可变参数的方法可以被重载,在被调用时,如果能匹配到参数定长的方法则优先调用参数定长的方法。

    public class Demo {  
    
        public void comp(int... items){  
            System.out.println("1");  
        }  
    
        public void comp(int[] items){      //会报错:Duplicate method comp(int[]) in type VariableParameter  
            System.out.println("2");  
        }  
    
        public static void main(String[] args) {  
    
        }  
    
    }  

    当试图使用数组作为参数去实现重载时,会报错,说明可变参数与数组冲突,但是:

    public class Demo {  
    
        public void comp(int[] items){      //会报错:Duplicate method comp(int[]) in type VariableParameter  
            System.out.println("2");  
        }  
    
        public static void main(String[] args) {  
            Demo vp = new Demo();  
            vp.comp(1,2,3,4);    //The method comp(int[]) in the type VariableParameter is not applicable for the arguments (int, int, int, int)  
        }  
    
    } 

    如果定义一个参数为数组的方法,像调用可变参数的方法一样调用它是会报错,说明可变参数并不是一个数组,由此我们可以总结出:

  5. 可变参数可以兼容数组参数,但数组参数无法兼容可变参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wimb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值