您的位置:首页 > 编程语言 > Java开发

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 变长参数