Java语言基础-Java5对数组的支持-方法的可变参数
需求:编写一个方法,统计商品的总价
/**
* 计算商品的总价
* @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。