
Java 可变长参数
发布日期:2021-05-08 00:12:51
浏览次数:20
分类:原创文章
本文共 1254 字,大约阅读时间需要 4 分钟。
Java 可变长参数本质是语法糖
可以理解为编译器帮我们把参数实例化为数组, 再传入方法
/** * 可变长参数 */ @Test public void testVarargs() { // 允许方法什么也不传, 那么编译器会帮我们实例化 new int[0] 传入 foo(); // 传入 null, 则编译器会把该可变参数赋值为 null, 即数组为 null foo(null); // 传入 1, 2, 3, 4 // 编译器会帮我们实例化 new int[]{1, 2, 3, 4} 传入方法 foo(1, 2, 3, 4); // 等效于 foo(1, 2, 3, 4); foo(new int[]{ 1, 2, 3, 4}); } private void foo(int... arr) { if (arr == null) { return; } for (int value : arr) { System.out.println(value); } }
javap 查看字节码, 可以看到方法声明的形参其实是数组
其他细节:
可变长参数固定放在形参列表最后一位
如果有重载方法, 那么优先选择不带可变长参数的方法
/** * 可变长参数固定放在形参列表最后一位 * 如果有重载方法, 那么优先选择不带可变长参数的方法 */ @Test public void testOverload() { // 会调用 foo2(String str) foo2("abc"); // 会调用 foo2(String str, int... arr) foo2("abc", 1, 2, 3, 4); } private void foo2(String str, int... arr) { System.out.println("foo2(String str, int... arr)"); } private void foo2(String str) { System.out.println("foo2(String str)"); }
总结:
可变长参数是 Java 语法糖
- 固定放在方法形参最末尾
- 允许不传值, 则默认初始化 0 长度的数组
- 允许传 null, 则赋值整个数组为 null
- 允许传不定长参数, 会帮我们自动实例化为数组
- 允许传数组, 则方法形参原样接收该数组
- 当有重载方法时, 优先选择不带可变长参数的方法
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年03月24日 18时53分37秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
第一类曲面积分
2021-05-09
Redis简介(数据结构,哨兵、集群和SpringDataRedis)
2021-05-09
MySQL锁机制
2021-05-09
Go 数组&切片
2021-05-09
Go 文件操作
2021-05-09
老Python总结的字典相关知识
2021-05-09
vue 不常见操作
2021-05-09
jQuery的事件绑定与触发 - 学习笔记
2021-05-09
Python处理接口测试的签名
2021-05-09
测试流程规范--测试报告模板
2021-05-09
Linux上TCP的几个内核参数调优
2021-05-09
记一次讲故事机器人的开发-我有故事,让机器人来读
2021-05-09
高德算法工程一体化实践和思考
2021-05-09
判断一个数是否是2的幂
2021-05-09
js 闭包(新)
2021-05-09
vscode 编辑python 如何格式化
2021-05-09
seo 回忆录百度基本概念(一)
2021-05-09
重新整理数据结构与算法(c#)—— 算法套路二分法[二十四]
2021-05-09
用ThreadLocal来优化下代码吧
2021-05-09