黑马程序员技术交流社区

标题: 关于可变参数 [打印本页]

作者: DOOR    时间: 2014-1-7 01:23
标题: 关于可变参数
本帖最后由 DOOR 于 2014-1-16 00:38 编辑
  1. public class VariableParameter {

  2.         /**
  3.          * @param args
  4.          */
  5.         public static void main(String[] args) {
  6.                 // TODO Auto-generated method stub
  7.                 System.out.println(add(2,3));
  8.                 System.out.println(add(2,3,5));  

  9.         
  10.         }
  11.         
  12.         public static int add(int x,int ... args){
  13.                 int sum = x;
  14.                 for(int i=0;i<args.length;i++){
  15.                         
  16.                         sum += args[i];                          
  17.                 }
  18.                 return sum;
  19.         }

  20. }
复制代码
打印结果为5和10,想不通,求解

作者: 浮出一个美    时间: 2014-1-7 06:51
你add方法的意思是返回所有int参数之和。
可变参数传过来就相当于是一个int数组。
add(2,3,5)这个在add方法里,args[0]就是3,args[1]就是5
作者: 净坛使者    时间: 2014-1-7 07:45
你的变参数相当于传入了新的数组,再求int数组的和
作者: 松毛    时间: 2014-1-7 08:22
add(2,3,5)就那这个为例吧!add(int x,int ... args)这个函数中,将2传递给力x,由于后面的int ... args为可变参数,在java中,调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,方法体中以数组的形式访问可变参数。所以也就相当于args这个数组中存储有3和5这两个元素。再利用函数内部的求和运算,sum的初始值赋值为2,再加上数组中元素的和,也就是整个add方法中的参数的和,即10.其他的也类似。
作者: 周志彬    时间: 2014-1-7 08:38
你的add方法第一个参数是加数 后面的几个参数是可变参数 由编译器自动把他们按顺序添加到args数组内  通过for循环让他们相加  
                System.out.println(add(2,3)); 结果是2+args[0] 也就是2+3=5
                System.out.println(add(2,3,5)); 结果是2+args[0]+args[1]也就是2+3+5=10
作者: 零敢    时间: 2014-1-7 16:53
你这个方法就是求和的,2+3不等于5?,2+3+5不等于10?当然是打印这两个结果............怎么会想不通...
作者: 渐渐不懂了    时间: 2014-1-9 15:13
本帖最后由 渐渐不懂了 于 2014-1-9 15:15 编辑

可变参数的特点:
1、只能出现在参数列表的最后;
2、...位于变量类型和变量名之间,前后有无空格都可以;
3、调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。
知道了可变参数特点你就知道上面的答案了吧!!希望能帮到你哦





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2