黑马程序员技术交流社区
标题:
一个可变参数的问题,求解
[打印本页]
作者:
黑马巩伟伟
时间:
2011-12-16 18:44
标题:
一个可变参数的问题,求解
本帖最后由 黑马巩伟伟 于 2011-12-20 00:19 编辑
public static void show(int...arr)这里可变参数内部是怎么实现的,那个高人给点思路?
{
}
大家可能误会我的意思了,我是说为什么int...这样定义的时间就能实现参数可变,具体是怎么实现的? 看老师的视频我就觉得很神奇,它在背后到底是怎么实现可变的。搞不明白。
作者:
刘基军
时间:
2011-12-16 18:50
arr实际是一个数组,根据调用该方法时传递参数的个数,决定实际数组的大小。
class Test
{
public static void main(String[] args)
{
System.out.println(add(100,200));
System.out.println(add(100,200,300));
}
public static int add(int... a)
{
int num=0;
System.out.println(a.length);
for(int i=0;i<a.length;i++)
{
num=num+a[i];
}
return num;
}
}
复制代码
作者:
小春同学
时间:
2011-12-16 19:25
就数组,就那么简单,就那么直接,思想不复杂,呵呵,,
作者:
张帅
时间:
2011-12-16 22:25
monghuan 发表于 2011-12-16 18:50
arr实际是一个数组,根据调用该方法时传递参数的个数,决定实际数组的大小。 ...
说的很对,如果要实现可变的参数,需要传递一个容器过去,为什么函数里也必须写上类型呢?因为这是形式变量,局部变量,相当于赋值运算,所以必须得定义,写上类型,我是这么理解的,不知道对不对。
作者:
刘健
时间:
2011-12-18 20:24
这个参考JDK1.4就知道了,1.4中多个参数就是用数组实现的,所以这里的int...实际上也是实现了数组
作者:
程传鹏
时间:
2011-12-19 07:27
本帖最后由 程传鹏 于 2011-12-19 07:28 编辑
public static void show(int...arr)这里可变参数内部是怎么实现的,那个高人给点思路?
{
}
大家可能误会我的意思了,我是说为什么int...这样定义的时间就能实现参数可变,具体是怎么实现的? 看老师的视频我就觉得很神奇,它在背后到底是怎么实现可变的。搞不明白。
楼主要是想知道的话,我们还原出一个对这样定义方式的接收的原代码的思路,即,int...arr背后不为人知的故事,{:soso_e113:}
本人水平有限,自己分析如下:
当我们定义了 public static void show(int...arr),当 public static void show(int...arr)被调用时,会有不定个数的参数传进来,
我们在使用int...arr时,设立一个变量parem一个一个的去接收参数,设立一个计数器count=-1;
每当parem接收一个参数,count++,arr[count]=parem;
当parem返回的是null时,说明参数全部接收完了,这时,所有参数都传进数组arr中,即可进行下一步运算。
作者:
刘旭
时间:
2011-12-19 10:42
当调用此方法时,传入参数是可变的。当编译此方法时,编译器会根据传入参数的个数,将参数封装成一个数组,然后共方法内部代码使用。至于具体是怎么封装的,我觉得应该是编译器的事儿吧
作者:
梁俊
时间:
2011-12-19 16:05
看不懂题
作者:
大梅
时间:
2011-12-19 16:25
我觉得是这样的。在定义方法的时候,写的int ... args是个形参,当具体调用的时候,根据你传入的参数个数,系统才会真正分配指定长度的数组(内存)。个人的理解,有不对的地方,多多指教
作者:
吴上储
时间:
2011-12-19 23:35
public class A{
public static void main(String[] args){
int a = add(1, 2, 3, 4, 5, 6, 7, 8, 9, 0);
int b = add(1,2,3,4,5);
System.out.println(a+" "+b);
}
public static int add(int...v){
int sum = 0;
for(int x : v){
sum =sum+ x;
}
return sum;
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2