java可变参数列表详解
2020-01-12 23:18
267 查看
java可变参数列表
从java5开始,java支持一种参数写法:Java类型后面三个点(如String…),叫可变长度参数列表。向其中传入参数时,它支持传入数组,个数不一定的同类型(…前面的类型)参数。第一次看到别人的代码里写了它的时候是有点懵的,但是用过两次之后就发现这个东西其实很简单。
public void printNames(String...names){ for(String name:names){ System.out.println(name); } } @Test public void test2(){ // 传入数组 String[] names = {"baidu","ali","tentce"}; printNames(names); } @Test public void test3(){ // 传入个数不一定的参数(可以为0个) printNames("baidu","ali","tentce"); }
其实查看idea反编译后的文件可以发现:
public void printNames(String... names) { String[] var2 = names; int var3 = names.length; for(int var4 = 0; var4 < var3; ++var4) { String name = var2[var4]; System.out.println(name); } } @Test public void test2() { String[] names = new String[]{"baidu", "ali", "tentce"}; this.printNames(names); } @Test public void test3() { this.printNames("baidu", "ali", "tentce"); }
也就是说其实java编译器是将这个可变长度参数当成了一个数组,只是说这个数组在写法上是方便了程序员的。接着再测试一波:
public void printNames(String...names){ System.out.println(names); } public void printNames(String[] names){ for(String name:names){ System.out.println(name); } }
编译器报错,printNames is already defined in …。也就是说编译器的确将这个可变长度参数当成了一个数组。另外,我试着将一个可变数组作为实参传入一个形参为数组的方法中:
@Test public void test4(){ String[] str = new String[]{"abc","def"}; test5(str); } public void test5(String...str){ test6(str); } public void test6(String[] str){ for (String s : str) { System.out.print(s+","); } }
编译器不报错,说明有戏,运行后打印结果:
abc,def,
这也就证明了可变参数其实就是数组,只是写法上有些不同而已。
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- Java可变参数列表详解
- Java学习笔记003——继承、抽象类、类相等测试、泛型数组列表、可变参数方法
- Java中支持可变参数详解
- java基础 ~ 方法(方法声明、调用、方法重载、可变参数列表)
- java 可变参数列表
- C和Java中函数的可变参数列表
- Java可变长参数列表
- 修改java的可变参数列表的方法
- java函数参数后面加三个点——可变长度参数列表
- JAVA类型后面跟3个点(可变长度参数列表)
- Java数组可变长参数详解
- Java的可变参数列表
- Java数组可变长参数详解
- Java 可变长参数列表
- Java可变参数关于参数列表含可变参数的方法重载的注意点
- 关于java中可变长参数的定义及使用方法详解
- java 函数可变参数列表
- Java中可变长度参数代码详解
- Java数组可变长参数详解
- Java数组可变长参数详解