[Java5新特性]可变参数
来源:互联网 发布:广发东财大数据 编辑:程序博客网 时间:2024/04/29 20:24
作者信息
作者姓名:金云龙
个人网站:http://www.longestory.com
个人公众帐号:搜索“longestory”或“龙哥有话说”
什么是可变参数
Java基础内容中,关于函数具有一种特性:重载,如果我们要完成多个数字想加的需求,可以按照以下代码完成:
public class Demo { public int add(int a, int b) { return a + b; } public int add(int a, int b, int c) { return a + b + c; } public static void main(String[] args) { int sum1 = new Demo().add(1, 2); int sum2 = new Demo().add(1, 2, 3); System.out.println("第一次的结果为:" + sum1 + ";第二次的结果为:" + sum2); }}
但是,这样完成的话,需要设置多个对应方法,还是不够简洁。我们可以利用数组的方式将其简化。
public class Demo { public int add(int[] arr) { int sum = 0; for (int i = 0; i < arr.length; i++) { sum += arr[i]; } return sum; } public static void main(String[] args) { int sum3 = new Demo().add(new int[] { 1, 2, 3, 4, 5 }); System.out.println("第三次的结果为:" + sum3); }}
在Java 5版本之后,提供了可变参数的方式来完成,如下代码所示:
public class Demo { public int add(int... arr) { int sum = 0; for (int i = 0; i < arr.length; i++) { sum += arr[i]; } return sum; } public static void main(String[] args) { int sum3 = new Demo().add(new int[] { 1, 2, 3, 4, 5 }); System.out.println("第三次的结果为:" + sum3); }}
从上面的两端代码中,我们可以看出,可变参数和数组参数在方法内部的内容是没有任何变化的。但是,在调用上可变参数要更灵活一些,例如以下代码:
public class Demo { public int add(int... arr) { int sum = 0; for (int i = 0; i < arr.length; i++) { sum += arr[i]; } return sum; } public static void main(String[] args) { int sum4 = new Demo().add(); System.out.println("第四次的结果为:" + sum4); int sum5 = new Demo().add(1); System.out.println("第五次的结果为:" + sum5); int sum6 = new Demo().add(1, 2, 3); System.out.println("第六次的结果为:" + sum6); }}
在上述案例代码中,sum4的调用就相当于new int[] {},sum5的调用就相当于new int[] {1},而sum6的调用就相当于new int[] {1,2,3}。但在实际使用时,可变参数要比数组更灵活。
可变参数原理
目前我们已经掌握可变参数的用法。在实际使用中,我们发现可变参数与数组的形式非常类似,只是在调用时更加灵活。下面我们就研究一下可变参数的原理是怎样的,将上面的可变参数的代码进行反编译后得到如下结果:
public class Demo{ public int add(int[] arr) { int sum = 0; for (int i = 0; i < arr.length; ++i) sum += arr[i]; return sum; } public static void main(String[] args) { int sum4 = new Demo().add(new int[0]); System.out.println("第四次的结果为:" + sum4); int sum5 = new Demo().add(new int[] { 1 }); System.out.println("第五次的结果为:" + sum5); int sum6 = new Demo().add(1, 2, 3); System.out.println("第六次的结果为:" + sum6); }}
通过查看反编译的代码结果后,我们发现通过Java 5版本的编译器,将可变参数编译为对应的数组内容进行传递。
可变参数应用
对应可变参数来说,有一种类似于C语言的实际应用,叫做字符串格式化,例如如下代码:
public class Demo { public static void main(String[] args) { // 字符串格式化案例 System.out.println("I am zhangwuji,I like games,I am 18 years old!"); System.out.println("I am zhouzhiruo,I like music,I am 18 years old!"); }}
上面的代码案例,可以利用可变参数改写成如下形式:
public class Demo { public static void main(String[] args) { // 字符串格式化案例 String name = "zhangwuji"; String hobby = "games"; int age = 18; String format = "I am %s,I like %s,I am %d years old!"; System.out.printf(format, name, hobby, age); }}
通过查看底层代码,我们可以知道printf()方法就是接收了一个可变参数来完成的:
public PrintStream printf(String format, Object ... args) { return format(format, args);}
转载说明:请注明作者及原文连接,谢谢!
0 0
- JAVA5新特性“可变参数”
- [Java5新特性]可变参数
- Java5.0新特性04-可变参数
- java5新特性之可变长参数
- java5的新特性fore和可变参数
- java5特性(可变参数列表)
- 《Java5.0新特性》 枚举、泛型、注释 包装类、静态应用、可变长参数、for-each
- Java5新特性之静态导入、可变参数、增强for循环、自动拆装箱
- Java5新特性之静态导入、可变参数、增强for循环、自动拆装箱
- Java新特性--可变参数
- java5中的可变参数
- Java5 新特性
- JAVA5新特性
- 《Java5.0新特性》
- JAVA5.0新特性
- java5的新特性
- java5新特性
- Java5.0新特性
- <开发调试>一次bug的启示
- 关于SVM
- 有序二叉树链式存储结构1——插入与遍历
- 随想录(简单的链接文件)
- vs2013+Xamarin F5提示部署不错误
- [Java5新特性]可变参数
- RedHat Enterprise Linux5中文显示乱码的解决办法
- seajs使用教程指南
- laravel 学习笔记——路由(基础)
- 从底层理解Python的执行
- 超级赛亚ACMer
- hdu 5254(暴力)
- Hue(五)集成Zookeeper
- 灰灰教你学python ~小黄鸡自动回复