黑马程序员技术交流社区

标题: 可变参数的一点小问题 [打印本页]

作者: 刘建宇    时间: 2012-2-10 22:54
标题: 可变参数的一点小问题
package cn.itcast.fuxi;

public class Changeableargs {

        /**
         * @param args
         */
        public static void main(String[] args) {
                //参数类型是String,为什么传入String数组也能被调用,不会报参数不匹配异常呢?
                test2(new String[]{"23","23","we"});
        }
        public static void test2(String... strArray) {
                if(strArray!=null && strArray.length>0){
                        for(String str : strArray){
                                System.out.print(str + "\t");
                        }
                }
        }
}
作者: Joyuang    时间: 2012-2-10 22:57
JDK中String类有大量的构造方法,里面有这个:
String(char[] value)
         分配一个新的 String,使其表示字符数组参数中当前包含的字符序列。
所以可以传String数组。
作者: 杜明辉    时间: 2012-2-10 23:57
String...  :三个点代表不确定类型,它可以是String[] 数组形式。;
作者: 林铁柱    时间: 2012-2-11 09:44
张老师在课程中讲过:当你在调用可变参数的方法时,编译器为该可变参数隐含创建了一个数组,在方法体中不就是以数组的形式访问可变参数的吗?
所以String... strArray表示你可以既可以传入一个String也可以传入一个String[],可以传入多个参数,也可以不传参数。这是可变参数的特性。其实编译器是把String... strArray当做String str,String str ... String[] strArray来处理的,只不过参数个数不确定。
如果将public static void test2(String... strArray){...}改为public static void test2(String[] strArray){...}就只接受String[],而不接受String了,这就是参数列表比数组参数更灵活的地方。
作者: 何洪森    时间: 2012-2-11 13:58
其实可变参数的接收就是一个数组,根据你传的参数都被放到那个数组里面。根据
你传入参数的不同,调用相应的方法。此时你传入的是一个String数组,它就会调用
接收数组的那个方法。
作者: 吴亨    时间: 2012-2-13 21:19
这是高新技术里面关于可变参数的问题,“..."表示参数个数不确定,而它的内部原理其实就是将传进来的参数封装成数组。
作者: 李杨    时间: 2012-2-13 21:28
可变参数是在JDK1.5引入的一个特性,可以接受数组也支持传递多个参数。

而参数是数组是JDK1.4的特性,你想啊,出了1.5新特性后就是可变参数了,当然要支持旧版本的数组参数了。要做到旧版本的兼容性啊。

注意,可变参数在使用的时候有个要求,比如你的方法是

public void printResult(String s, int... n)
可变参数要放到参数列表的最后。顺序要正确。
作者: 黄锦成    时间: 2012-2-13 22:20
其实test2方法里面的可变参数,实际上就是一个数组




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