zoukankan      html  css  js  c++  java
  • java的可变参数和foreach循环需要注意的坑

    先讲可变参数。

    上代码:

    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:

    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循环问题

    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也会报空指针异常

    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);
            }
        }
    }

    结果:

    =================================Talk is cheap, show me the code===============================

    CSDN博客地址:https://blog.csdn.net/qq_34115899
  • 相关阅读:
    Report parameters
    维护SE16N Maintain entries
    SE16N Related &SAP_EDIT (转载)
    SD增强 MV45AFZZ
    原始系统问题SE03 Original System
    eclipse 连接不上HBase集群
    Hadoop hdfs yarn HA
    hadoop手动启动jobhistory
    hadoop错误提示 exitCode: 1 due to: Exception from container-launch.
    no filesystem for scheme hdfs
  • 原文地址:https://www.cnblogs.com/lcy0515/p/10807887.html
Copyright © 2011-2022 走看看