入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

Java语言基础-Java5对数组的支持-方法的可变参数

创建时间:2016-11-09 投稿人: 浏览次数:524

需求:编写一个方法,统计商品的总价

    /**
     * 计算商品的总价
     * @param arr
     * @return
     */
    public static double getSum(double ... arr){
        double sum = 0.0;
        for (double price:arr){
            sum += price;
        }
        return sum;
    }

调用:

getSum(10.0,22.2,33.33,40.12);

分析

该方法的本质也是对数组的操作,再调用的时候其实也是传递的一个数组作为参数,我们可以查看编译器编译后的代码分析得知:

    public static transient double getSum(double ad[]){
        double d = 0.0D;
        double ad1[] = ad;
        int i = ad1.length;
        for (int j = 0; j<i; j++){
            double d1 = ad1[j];
            d += d1;
        }
        return d;
    }

// 调用的时候,先创建double类型的数组
getSum(new double[]{10D, 22.2D, 33.33D, 40.12D});

结论:方法的可变参数,其实也是一种语法糖,编译器级别的特性,让开发者写代码更简单。
方法的可变参数其底层就是一个数组类型。

所以,参数还是可以传递数组:

//getSum(10.0,22.2,33.33,40.12);

// 也可以这样调用
double d[] = new double[]{10.0,22.2,33.33,40.12};
getSum(d);

注意虽然上面2种调用方法都可以,但它们是有区别的:

        // 如果不传入参数,不会报错
        getSum();

        // 会报空指针错误
        getSum(new double[]{});

关于可变参数的其他知识点

我们上面的需求是计算商品的总价,如果需要打一个折扣,此时getSum 方法可以做如下修改:

    /**
     * 计算商品总价
     * @param off 折扣
     * @param arr
     * @return
     */
    public static double getSum(double off, double ... arr){
        double sum = 0.0;
        for (double price:arr){
            sum += price;
        }
        return sum * off;
    }

注意可变参数必须作为方法的最后一个参数
调用的时候:

 getSum(0.8,10.0,22.2,33.33,40.12);

0.8 是折扣

声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。