黑马程序员技术交流社区

标题: JDK1.5新特性:可变参数视频疑惑 [打印本页]

作者: 樊其杰    时间: 2013-3-22 23:35
标题: JDK1.5新特性:可变参数视频疑惑
  1. public class VrableParameter {

  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.         }
  9.        
  10.         public static int add(int x,int ... args){
  11.                 int sum=x;
  12.                 for(int i=0;i<args.length;i++)
  13.                         sum+=args[i];
  14.                 return sum;
  15.         }
  16. }
复制代码
刚开始张老师打的是sum=0;后来一个同学说错了,又改成sum=x;哪里错了?我怎么觉得是sum=0对的?
作者: 谷文仁    时间: 2013-3-22 23:39
可变参数:适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。注意:可变参数必须位于最后一项。当可变参数个数多余一个时,必将有一个不是最后一项,所以只支持有一个可变参数。因为参数个数不定,所以当其后边还有相同类型参数时,java无法区分传入的参数属于前一个可变参数还是后边的参数,所以只能让可变参数位于最后一项。
作者: 马利    时间: 2013-3-22 23:46
的确是开始的sum=0写错了
首先你看一下add函数的目的是什么?是把所有传进的参数相加求和的对不对。
而第一个型参不就是x吗,是零就错了
作者: 全超    时间: 2013-3-22 23:58
楼上说的一点不错,举个例子调用方法输入两个参数10和0:add(10,0)。如果sum=0那结果是0+0=0了;所以sum的值要是第一个形参传进来的值
作者: 马利    时间: 2013-3-23 00:02
不管是什么具体值,是什么都是传给型参,用的着去关心具体值是什么吗?关心的话也是谁调用这个函数谁去给型参赋值,赋什么值就随便了
作者: VOIDMAIN    时间: 2013-3-23 15:02
我发现public static int add(int x,int ... args)这种写法不合理,按这种写法,args[0]会是数组的第二个数,那么这样要有正确结果,就必须让sum=x;如果写成public static int add(int x,int y,int  ... args),那这时候args[0]会从数组的第三位开始取,那么sum的初始值就必须是sum=x+y;我认为最合理的写法应该是public static int add(int ... args);这样可以让sum=0;这样更符合可变参数的方便性。
作者: 张昶    时间: 2013-3-23 16:00
支持楼上的说法,举得例子也好!





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