Java基础面试:可变长参数

打印 上一主题 下一主题

主题 866|帖子 866|积分 2598

Java中的可变长参数

什么是可变参

可变参数是在 Java 5.0 中引入的一个特性,是一种语法糖,它允许方法可以担当不定命量的参数,而无需显式地处理惩罚数组。在编译时,方法声明中的可变参数会被转换为数组参数,方法调用中的参数会被打包成一个数组。
可变参的语法

可变参数的语法非常简朴,只须要在参数类型后面加上三个点 ... 即可。例如:
  1. public void printNumbers(int... numbers) {
  2.     for (int number : numbers) {
  3.         System.out.println(number);
  4.     }
  5. }
复制代码
使用方式示例
  1. public class VarargsDemo {
  2.     public static void main(String[] args) {
  3.         printNumbers(); // 不传递任何参数
  4.         printNumbers(1); // 传递一个参数
  5.         printNumbers(1, 2, 3, 4); // 传递多个参数
  6.         int[] array = {5, 6, 7, 8};
  7.         printNumbers(array); // 传递一个数组
  8.     }
  9.     public static void printNumbers(int... numbers) {
  10.         System.out.println("传递的参数数量: " + numbers.length);
  11.         for (int number : numbers) {
  12.             System.out.println(number);
  13.         }
  14.     }
  15. }
复制代码
输出
  1. 传递的参数数量: 0
  2. 传递的参数数量: 1
  3. 1
  4. 传递的参数数量: 4
  5. 1
  6. 2
  7. 3
  8. 4
  9. 传递的参数数量: 4
  10. 5
  11. 6
  12. 7
  13. 8
复制代码
为什么须要可变长参数

使用可变长参数可以简化代码,而且使得方法更加机动。当我们无法确定方法须要吸收多少个参数时,可变长参数提供了一种便捷的方式来处理惩罚这种情况。
在没有可变长参数的情况下,假如要实现类似的功能,我们大概须要界说多个重载方法,每个方法担当差异数量的参数。如许会导致代码冗余,而且增长维护成本。
可变长参数的实现原理

可变长参数的实现原理是通过数组来存储传入的参数。在方法内部,我们可以将可变长参数视为一个数组举行操纵。将上述 printNumbers 方法反编译之后如下:
  1. public class VarargsDemo {
  2.     public VarargsDemo() {
  3.     }
  4.     public void printNumbers(int... numbers) {
  5.         int[] var2 = numbers; // 将传入的参数存储到了数组中
  6.         int var3 = numbers.length;
  7.         for(int var4 = 0; var4 < var3; ++var4) {
  8.             int number = var2[var4];
  9.             System.out.println(number);
  10.         }
  11.     }
  12. }
复制代码
使用留意事项


  • 可变参数的位置:同一个方法中只可界说一个可变参数,且可变参数必须是方法署名中的最后一个参数。
  1. public void printNumbers(int fixedParam, int... numbers) {
  2.     // 合法
  3. }
  4. public void printNumbers(int... numbers, int fixedParam) {
  5.     // 不合法
  6. }
复制代码

  • 性能考虑:每次调用带有可变参数的方法时,都会创建一个新的数组来存储传入的参数。因此,假如性能是系统的关键因素,大概须要考虑使用传统的数组或聚集来传递参数。
  • 类型检查:可变参数的类型检查发生在编译时。假如传递的参数类型不匹配,编译器会报错。
更多精彩内容,请微信搜刮并关注【Java驿站】公众号。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

欢乐狗

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表