A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘建宇 黑马帝   /  2012-2-10 22:54  /  2906 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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");
                        }
                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

7 个回复

倒序浏览
JDK中String类有大量的构造方法,里面有这个:
String(char[] value)
         分配一个新的 String,使其表示字符数组参数中当前包含的字符序列。
所以可以传String数组。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
String...  :三个点代表不确定类型,它可以是String[] 数组形式。;

评分

参与人数 1技术分 +1 收起 理由
唐秀启 + 1

查看全部评分

回复 使用道具 举报
张老师在课程中讲过:当你在调用可变参数的方法时,编译器为该可变参数隐含创建了一个数组,在方法体中不就是以数组的形式访问可变参数的吗?
所以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了,这就是参数列表比数组参数更灵活的地方。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
其实可变参数的接收就是一个数组,根据你传的参数都被放到那个数组里面。根据
你传入参数的不同,调用相应的方法。此时你传入的是一个String数组,它就会调用
接收数组的那个方法。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
这是高新技术里面关于可变参数的问题,“..."表示参数个数不确定,而它的内部原理其实就是将传进来的参数封装成数组。
回复 使用道具 举报
李杨 黑马帝 2012-2-13 21:28:39
7#
可变参数是在JDK1.5引入的一个特性,可以接受数组也支持传递多个参数。

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

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

public void printResult(String s, int... n)
可变参数要放到参数列表的最后。顺序要正确。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
其实test2方法里面的可变参数,实际上就是一个数组
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马