当前位置: 首页 > 编程日记 > 正文

java——慎用可变参数列表

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

 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

相关文章:

一位老码农的分享:一线程序员该如何面对「中年危机」?

如果这是第二次看到我的文章,欢迎文末扫码订阅我个人的公众号(跨界架构师)哟~ 本文长度为2728字,建议阅读8分钟。坚持原创,每一篇都是用心之作~先来聊一下这个问题的背景吧。前两天有小伙伴问到Z哥这个问题…

白话spring依赖注入

Spring能有效地组织J2EE应用各层的对象。Action?Service?DAO?,都可在Spring的管理下有机地协调、运行。Spring将各层的对象以松耦合的方式组织在一起,对象与对象之间没有直接的联系,各层对象的调用完全面向…

2软件测试初相识

软件测试初相识 软件测试初识为什么要做软件测试,做软件测试的必要性是什么?关于软件测试的定义有很多种软件测试的两面性软件测试的价值总结软件测试初相识 文章目录 软件测试初识为什么要做软件测试,做软件测试的必要性是什么?关于软件测试的定义有很多种软件测试的两面性…

【go】sdk + idea-plugin 开发工具安装

http://golang.org/doc/install/source第一步:windows 安装 git第二步$ git clone https://go.googlesource.com/go $ cd go $ git checkout go1.4.1保持翻墙姿势 D:\Program Files (x86)\Git\bin>git clone https://go.googlesource.com/go Cloning into go... …

无限极:对虚假宣传行为查处不力 推十条整改措施

中新网1月28日电 无限极今日发表声明称,将进一步响应整治“保健”市场乱象百日行动,承担主体责任,落实专项整改。 声明全文如下: 1月8日,国家市场监督管理总局等13部委联合发出《关于开展联合整治“保健”市场乱象百日…

基于WTL自绘 - 表情选择界面

1.无窗口绘制(网格, 背景,图片,预览)。2.采用Cximage处理图像。3.关于源码 请发邮件 satngqq.com4.已经增加到wtl_duilib 0.5版Demo中转载于:https://www.cnblogs.com/satng/archive/2011/08/13/2138780.html

3软件测试原理与软件缺陷

软件测试原理与软件缺陷 文章目录 前言软件测试原理软件缺陷总结前言 知其然,更要知其所以然。 软件测试原理 下图中很直观的展示出了软件测试原理。根据测试目标设计测试输出,依据测试依据(包括软件需求、设计等)给出预期结果,在被测对象上运行得到运行结果,将运行结果…

Oracle wrap 和 unwrap( 加密与解密) 说明

一. Wrap 说明官网的说明如下:A PL/SQL Source Text Wrappinghttp://download.oracle.com/docs/cd/E11882_01/appdev.112/e17126/wrap.htm#LNPLS1744You can wrap the PL/SQL source text for any of these stored PL/SQL units, thereby preventing anyone from di…

python的沙盒环境virtualenv(二)--简单使用

安装 sudo apt-get install python-virtualenv使用方法 virtualenv [虚拟环境名称] 如,创建**ENV**的虚拟环境 virtualenv ENV默认情况下,虚拟环境会依赖系统环境中的site packages,就是说系统中已经安装好的第三方package也会安装在虚拟环境…

使用Powershell批量为Azure资源添加Tags

在使用Azure的过程中,我们可以将Tags应用于Azure资源,从而可以将元数据逻辑的组织到某些分类中。每个Tags由名称和值组成。例如,我们可以将名称“Environment”和值“Production”应用于生产中的所有资源。应用Tags以后,我们可以使…

4软件测试阶段

软件测试流程和规范前言软件测试阶段总结前言 不以规矩,不成方圆。 软件测试阶段 在软件测试中主要的测试阶段包括文档集测试、单元测试、集成测试、系统测试(包括功能测试和非功能测试)、安装测试、验收测试。 总结 不同的测试阶段有不同…

InfluxDB 2.0 Alpha展开测试!将会加入查询语言Flux

InfluxData释出其开源时序数据库InfluxDB 2.0 Alpha测试版,这个版本最大的更新,便是增加了新的数据脚本和查询语言Flux,不只能提供跨平台时序数据操作,还能将TICK组件堆栈整合成一个更加一致的平台。InfluxDB是一个以Go语言开发的…

Weka 开发[1]-Instances类

先google一下,把Weka软件下载下来,安装完成之后,在Weka的安装目录中有一个weka.jar的包。 把包添加到工程中后,就可以调用weka中的函数了。 再介绍一点weka的基本知识,在weka的目录下,有一个data的文件夹&a…

SQL Server 2005 18452登录错误 的解决方法

无法连接到服务器 服务器:消息18452, 级别16,状态1 [Microsoft][ODBC SQL Server Driver][SQL Server]用户‘sa’登陆失败。原因:未与信任SQL Server连接相关联 该错误发生的原因是由于SQL Ser…

5软件开发与软件测试

软件开发与软件测试 前言瀑布模型V模型总结前言 软件测试与软件开发过程是相辅相成、相互依赖、相互转换的过程。 瀑布模型 瀑布模型规定了软件生命周期中的各项活动,包括需求分析、概要设计、编码、测试、验收与交付、使用与维护等。瀑布模型中各个软件过程是自上而下、相互…

认识docker

一、Docker工作原理 二、Docker容器和虚拟机对比 三、镜像容器管理 1、Docker关键组件 2、Docker架构 3、Docker内部组件 镜像(Image)——一个特殊的文件系统 Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置…

Enterprise Library系列文章回顾与总结

Enterprise Library系列文章回顾与总结 自Enterprise Library 1.1 推出以来,Terry写了一系列的关于Enterprise Library的文章,其中得到了很多朋友的支持,在这里一并表示感谢。为了方便大家的阅读,这里我做了一下整理与分类。第Ⅰ部…

句法模式识别(两)-正规文法、上下文无关文法

正规的语法特点 1.全部长度有限的语言都是正规的。 2.用正规文法当然能产生无限长串,当中周期反复部分的长度不大于非终止符的长度。 举个样例 在此规则之下。能生成句子 当中周期反复部分为ab,这个样例的非终止符的元素个数为2,故满足2不大于…

6软件测试过程

软件测试过程前言软件测试的几个典型过程总结前言 测试策划、测试设计与实现、测试执行、回归测试和测试总结。 软件测试的几个典型过程 软件测试过程主要包括测试策划、测试设计与实现、测试执行、回归测试和测试总结,每个活动过程中包括的主要工作内容如下图所示…

BFS之三(单向bfs和康托压缩)

//poj 1077 Eight#include <iostream> //单向bfs和康托压缩#include<string>using namespace std;bool visited[1000000];int fac[]{1,1,2,6,24,120,720,5040,40320,362880}; //9!表int cantor(int arr[]) {int temp,num1; //当排列为…

[JavaWeb基础] 007.Struts2的配置和简单使用

1.框架简介 采用Struts能开发出基于MVC(Model-View-Controller)设计模式的应用构架&#xff0c;用于快速开发Java Web应用。Struts实现的重点在C(Controller)&#xff0c;包括ActionServlet/RequestProcessor和我们定制的Action,也为V(View)提供了一系列定制标签&#xff08;C…

使用Rust + Electron开发跨平台桌面应用 ( 一 )

前言 近段时间学习了Rust&#xff0c;一直想着做点什么东西深入学习&#xff0c;因为是刚学习&#xff0c;很多地方都不熟悉&#xff0c;所以也就不能拿它来做编译器这些&#xff0c;至于web开发&#xff0c;实际上我并不建议拿这个来学习一门语言&#xff0c;大概有几个方面&a…

7软件质量与测试规范

软件质量与测试规范 前言标准/规范产品质量模型总结前言 标准和规范可以指导测试工作的方向。 标准/规范 软件质量与测试标准分为国际标准、国家标准、行业标准、企业(机构)规范、项目规范等。下一层标准需要在上一层标准的框架下做扩展或补充。比如行业标准首先要满足国家…

UVa 679 - Dropping Balls

称号&#xff1a;有一个完整的二叉树&#xff0c;每个节点是一个开关&#xff0c;最初的全封闭&#xff0c;球从顶点丢弃。 每次通过开关球将将其状态反转。现在先问k球落到d当层交换机经过号。分析&#xff1a;进制编码。经过模拟几次能够看出&#xff0c;球会让开关形成连续二…

【原创】StreamInsight查询系列(六)——基本查询操作之分组聚合

上篇博文介绍了StreamInsight基础查询操作中的用户自定义聚合部分。这篇文章将主要介绍如何在StreamInsight查询中使用分组聚合。 测试数据准备 为了方便测试查询&#xff0c;我们首先准备一个静态的测试数据源&#xff1a;var weatherData new[] {new { Timestamp new DateT…

生态环境部:提升5.5亿居民饮用水环境安全保障水平

资料图&#xff1a;备用水源。于从文 摄 中新网1月30日电 据生态环境部网站消息&#xff0c;生态环境部牵头扎实推进饮用水水源地环境保护专项行动&#xff0c;成效显著。截至2018年12月31日&#xff0c;除9个问题因冬季施工难度大或实际工程量大等因素仍在整治外&#xff0c;…

8单元测试的必要性

单元测试的必要性 前言单元测试堪比汽车零件检测总结前言 积土成山,风雨兴焉。 单元测试堪比汽车零件检测 据估计,一般轿车约由1万个不可拆解的独立零部件组装而成。结构极其复杂的特制汽车,,如F1赛车等,其独立零部件的数量可达到2万个之多。可以设想下,如果汽车组装企业…

朴素高精度乘法的常数优化

2015年辽宁省赛热身赛有一道高精度乘法 传送门&#xff1a;NEUOJ 1574 A*B 1574: A * B 时间限制: 10 Sec 内存限制: 128 MB题目描述 Calculate $a \times b$. 输入 Your program will be tested on one or more test cases. In each test case, two integer $a$, $b$ ($0\le …

计算机专业今后的发展方向

计算机专业毕业后&#xff0c;大致的工作方向是软、硬、网、图 四大类&#xff0c;尤其以软件、网络为现今的首选 。从岗位上分&#xff0c;又可以分为技术道路、营销道路两大方向。 if 你选择硬件技术&#xff0c;then 从现在开始&#xff0c;牢记&#xff1a;天道酬勤&#x…

新警达尼亚尔·迪力木拉提的春运一天

新春佳节临近&#xff0c;乌鲁木齐铁路公安处民警坚守一线&#xff0c;保障旅客安全乘车。达尼亚尔迪力木拉提&#xff0c;今年26岁&#xff0c;新疆伊犁州伊宁市人&#xff0c;毕业于大连理工大学。2017年通过国家公务员考试入警为乌鲁木齐铁路公安局乌鲁木齐公安处见习民警&a…