博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java——慎用可变参数列表
阅读量:6503 次
发布时间:2019-06-24

本文共 1223 字,大约阅读时间需要 4 分钟。

 

说起可变参数,我们先看下面代码段,对它有个直观的认识,下方的红字明确地解释了可变参数的意思:

1 public class VarargsDemo{ 2      3     static int sum(int... args) { 4         int sum = 0; 5         for(int arg:args) 6             sum += arg; 7         return sum; 8     } 9     public static void main(String args[]) throws FileNotFoundException {10         System.out.println(sum(1,2,3,4,5,6,7,8,9,10));            System.out.println(sum(1,2,3,4,5,6));            System.out.println(sum(1,2,3);11     }12 }

 

可变参数的机制原理:

1.创建一个array[],它的size就是所传参数的个数;

2.将参数放入到array[]中;

3.将array[]传给方法。

 

看起来这个可变参数非常的便利,我们不用去考虑参数的个数,随心所欲的使用。但是这个观点不对,它给我带来便利的同时,也有很多潜在的危险,我们要慎重使用。

1.如果所传参数为null,方法里有对参数的引用(比如 args[0])时,那么就会在运行时失败(编译时却检测不出错误);

2.在对性能有要求时,我们要慎重考虑是否使用可变参数。因为,可变参数方法的调用都会引起array的内存分配和初始化,这会给性能带来损耗。

   →

解决方案:

假设调用可变参数的方法中,有95%只是调用参数个数小于4,那么就可以将个数小于4的方法,用普通方法定义;剩余的5%,调用可变参数方法。

1     public void foo() {}2     public void foo(int a1) {}3     public void foo(int a1, int a2) {}4     public void foo(int a1, int a2, int a3) {}5     public void foo(int a1, int a2, int a3, int... rest) {}

3.在打包作业时,还有一点需要注意。

当可变参数的使用发生变动时(比如:以前用可变参数方法,现在用普通方法),所有引用参数列表的类的.class都要重新生成,因为可变参数的array的分配和初始化是在编译期间完成的。

 

参考文献:

《Effective Java》 第三版 Item 53

 

转载于:https://www.cnblogs.com/lihao007/p/10325855.html

你可能感兴趣的文章
我的友情链接
查看>>
【Visual C++】游戏开发笔记十三 游戏输入消息处理(二) 鼠标消息处理
查看>>
我的友情链接
查看>>
Java 使用 Redis
查看>>
JPA常用注解
查看>>
Java基础学习总结(1)——equals方法
查看>>
Maven学习总结(6)——Maven与Eclipse整合
查看>>
HTML5:理解head
查看>>
oracle
查看>>
java SpringUtil获取bean
查看>>
Centos6.4最小化安装系统初始化脚本
查看>>
PaaS变厚了
查看>>
赛门铁克开启“容灾即服务”时代
查看>>
复杂度归纳--小结
查看>>
基础篇9-python基本数据结构-列表
查看>>
PHP学习笔记 第八讲 Mysql.简介和创建新的数据库
查看>>
【git】git入门之把自己的项目上传到github
查看>>
js获取鼠标位置
查看>>
2016.8.11 DataTable合并及排除重复方法
查看>>
php 魔术方法 说明
查看>>