前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java的可变参数和foreach循环需要注意的坑

java的可变参数和foreach循环需要注意的坑

作者头像
砖业洋__
发布2023-05-06 18:55:09
3420
发布2023-05-06 18:55:09
举报
文章被收录于专栏:博客迁移同步博客迁移同步

先讲可变参数。

上代码:

代码语言:javascript
复制
public class Test {
    public static void main(String[] args) {
        cc();
    }
    public static void cc(int... a) { // 形参可变的数组
        System.out.println(a.length);
        for (int i : a) {
            System.out.println(i);
        }
    }
}

运行结果:0

批注:形参个数可变的参数本质就是一个数组参数。但是和数组参数又有不同。

第一种:public static void cc(int... a)大致等于

第二种:public static void cc(int[] a)

不同点在哪里?

如果形参是数组类型int[] a,那么必须传入参数,不能cc(),否则编译错误。

但是用int... a,这个参数可以不填,切记!不传入参数时数组a不是null,数组a是一个长度为0的int数组。除非显式传入null参数。

形参是数组类型int[] a,必须要传入标准的数组形式的参数,比如

定义方法:public static void cc(int[] a) {...}

那么传入的时候cc(new int[]{ 1, 67, 32, 8, 9 }); 

定义方法:public static void cc(int... a) {...}

那么传入的时候可以cc(1, 5, 8);

表示数组a有3个元素,分别为1,5,8

也可以传入cc();数组a长度为0

eg:

代码语言:javascript
复制
public class Test {
    public static void main(String[] args) {
        cc(1, 3, 5);
        System.out.println();
        dd(new int[] { 2, 4, 6 });
    }

    public static void cc(int... a) { // 形参可变的数组
        for (int i : a) {
            System.out.print(i);
        }
    }

    public static void dd(int[] a) { // 形参可变的数组
        for (int i : a) {
            System.out.print(i);
        }
    }
}

运行结果:

135

246

接下来讲foreach循环问题

代码语言:javascript
复制
public class Test {
    public static void main(String[] args) {
        cc();
        dd(null);
    }
    public static void cc(int... a) { // 形参可变的数组
        System.out.println(a.length);
        for (int i : a) {
            System.out.println(i);
        }
    }
    public static void dd(int... a) { // 形参可变的数组
        for (int i : a) {
            System.out.println(i);
        }
    }
}

运行结果:

可以看到,不传入参数,数组a是一个长度为0的数组,foreach循环条件不满足,所以不打印

显式传入null,foreach循环会报空指针异常。所以使用foreach循环的时候一定要考虑集合或者数组的引用是否为null,以免发生空指针异常。

同理,形参为数组类型传入null,进入foreach也会报空指针异常

代码语言:javascript
复制
public class Test {
    public static void main(String[] args) {
        cc(null);
    }
    public static void cc(int[] a) { // 形参可变的数组
        for (int i : a) {
            System.out.print(i);
        }
    }
}

结果:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-07-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档