Java 可变长参数
2016-12-12 10:49
288 查看
原理
Java可变长参数列表的实现是通过编译器把把这些参数封装成一个数组来传递的。注意点
可变成参数列表不能与同类型数组重载,因为它本身就是数组
void print(int... args) { } //Error : Duplicate method print void print(int[] args) { }
可变成参数类型不能与自动装箱后类型相同的方法重载
void print(int... args) { } void print(Integer[] args) { } void test() { //Error : The method print(int[]) is ambiguous for the type print(1, 2, 3); }
可变长参数列表只能放在方法参数列表的最后
void print(int firstArg, int... args) { } //Error : The variable argument type int of the method print must be the last parameter void print(int... args, String str) { }
参数数量不确定。可以传多个,也可以一个都不传,也可以传null
/* * 该方法可以用Arrays.toString(T[] args)来代替。 */ static void print(int... args) { if(args == null) { System.out.println("args = null"); return; } StringBuilder sb = new StringBuilder(); sb.append("len = "); sb.append(args.length); sb.append("{ "); for(int i=0;i<args.length;i++) { sb.append(args[i]); if(i != args.length-1) { sb.append(", "); } } sb.append(" }"); System.out.println(sb.toString()); } public static void main(String[] args) { print(1, 2, 3); print();//相当于传递一个长度为零的数组 print(null); }
输出
len = 3{ 1, 2, 3 } len = 0{ } args = null
传递变长参数列表和直接传递变长参数类型的数组结果是一样的
static void print(int... args) { if(args == null) { System.out.println("args = null"); return; } StringBuilder sb = new StringBuilder(); sb.append("len = "); sb.append(args.length); sb.append("{ "); for(int i=0;i<args.length;i++) { sb.append(args[i]); if(i != args.length-1) { sb.append(", "); } } sb.append(" }"); System.out.println(sb.toString()); } public static void main(String[] args) { print(1, 2, 3);//经过编译器改造也会把它变为数组类型 print(new int[] {1, 2, 3}); }
输出
len = 3{ 1, 2, 3 } len = 3{ 1, 2, 3 }
相关文章推荐
- Java 1.5 特性之一:可变长度的参数功能
- 晕倒,原来Java 1.5中有了可变参数和新的for each的语法了,今天才知道!
- C和Java中函数的可变参数列表
- java1.5新特性之可变参数和增强for循环
- JAVA5新特性“可变参数”
- Java1.5新功能可变长方法参数-varargs
- java 数组操作1.5后新特性--可变参数以及foreach使用
- java可变参数使用
- Java可变参数
- java中可变长度参数的应用
- 晕倒,原来Java 1.5中有了可变参数和新的for each的语法了,今天才知道!
- Java可变长参数(原创)
- JAVA中的可变参数
- Java可变参数方法重载时要注意的几个问题
- JAVA 可变参数使用
- 晕倒,原来Java 1.5中有了可变参数和新的for each的语法了,今天才知道!
- 如何应用Java的可变参数 推荐
- 传智播客 Java网络公开课一静态导入枚举以及可变参数
- java 5 新特性——可变参数方法
- java新特性——对数组的支持(可变参数、foreach)