可变长参数

java可变长参数

可变长度参数:

适用于参数个数不确定,类型确定的情况。

1、可变长度参数语法: 类型… 变量名

(注意:一定是3个点。"…"在变量类型和变量名之间,前后有没有空格都可以 。)

例如:

  • int… args
  • String… args
    (这些就是可变长度参数)

2、相关知识:

2.1、可变长度参数,能够传入参数个数是:0~N个

2.2、可变长度参数只能放在参数列表的最后一个位置上,而且可变长度参数只能有1个

2.3、可变长度参数,可以当做一个数组来看待。

例子1:

public class Test {
    public static void main(String[] args) {
        m();
        m(1,2);
        m(1,2,3,4,4);//可以输入0~N个

        //编译报错:定义的是int类型的参数
        //m("123")
    }
    
    public static void m(int... args){//可变长度参数
        //遍历
        for (int i = 0; i < args.length; i++) {
            System.out.println(args[i]);
        }
        System.out.println("=======");
    }
}

运行结果:

=======
1
2
=======
1
2
3
4
4
=======

例子2:

可变长度参数只能在参数列表的最后,且只能有一个

原因
当可变参数个数多于一个时,必将有一个不是最后一项,所以只支持有一个可变参数。因为参数个数不定,所以当其后边还有相同类型参数时,Java 无法区分传入的参数属于前一个可变参数还是后边的参数,所以只能让可变参数位于最后一项

public class Test1 {
    public static void main(String[] args) {
        m(1,"");

        m(1,"我","是","人");

        m2(2,"我","的","天");
    }


    //错误:参数列表:必须在最后,只能有1个
    //public static void mc1(String... args1,int args2){}
    //public static void mc2(String... args1,int... args2){ }

    public static void m(int a,String... args1){
        System.out.println(a);
        for (int i = 0; i < args1.length ; i++) {
            System.out.println(args1[i]);
        }
        System.out.println("======");
    }

    public static void m2(int a,String b,String... args1){
        System.out.println(a);
        System.out.println(b);
        for (int i = 0; i < args1.length ; i++) {
            System.out.println(args1[i]);
        }
        System.out.println("======");
    }
}

运行结果:

1

======
1
我
是
人
======
2
我
的
天
======

例子3:

实际上:调用可变参数的方法时,编译器为该可变参数隐式地创建一个数组,在方法体中以数组的形式访问可变参数。

public class Test2 {
    public static void main(String[] args) {
        m();
        m("你","看","我","像","数","组","吗");

        //也可以传一个数组
        String[] strings = {"你","过","来","呀"};
        m(strings);

        //也可以这样放一个数组
        m(new String[]{"你","好"});
        
        m("我","好");

    }

    public static void m(String... args) {
        //遍历
        //args有length属性,说明args是一个数组。(所以可以将可变长度参数当做一个数组来看)
        for (int i = 0; i < args.length; i++) {
            System.out.println(args[i]);
        }
        System.out.println("======");
       /* //foreach遍历
        for (String arg : args){
            System.out.println(arg);
        }*/
    }
}

运行结果:

======
你
看
我
像
数
组
吗
======
你
过
来
呀
======
你
好
======
我
好
======

文章难免有错误与欠妥之处,恳请各位批评指正。
(不足者补充之,冗芜者删削之,错误者改正之)

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小白要努力变黑

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

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

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

打赏作者

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

抵扣说明:

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

余额充值