Java 可变长参数
JAVA 参数 可变
2023-09-11 14:22:55 时间
原理
Java可变长参数列表的实现是通过编译器把把这些参数封装成一个数组来传递的。
注意点
可变成参数列表不能与同类型数组重载,因为它本身就是数组
void print(int... args) { }
//Error : Duplicate method print
void print(int[] args) { }
可变成参数类型不能与自动装箱后类型相同的方法重载
void print(int... args) { }
void print(Integer[] args) { }
void test() {
//Error : The method print(int[]) is ambiguous for the type
print(1, 2, 3);
}
可变长参数列表只能放在方法参数列表的最后
void print(int firstArg, int... args) { }
//Error : The variable argument type int of the method print must be the last parameter
void print(int... args, String str) { }
参数数量不确定。可以传多个,也可以一个都不传,也可以传null
/*
* 该方法可以用Arrays.toString(T[] args)来代替。
*/
static void print(int... args) {
if(args == null) {
System.out.println("args = null");
return;
}
StringBuilder sb = new StringBuilder();
sb.append("len = ");
sb.append(args.length);
sb.append("{ ");
for(int i=0;i<args.length;i++) {
sb.append(args[i]);
if(i != args.length-1) {
sb.append(", ");
}
}
sb.append(" }");
System.out.println(sb.toString());
}
public static void main(String[] args) {
print(1, 2, 3);
print();//相当于传递一个长度为零的数组
print(null);
}
输出
len = 3{ 1, 2, 3 }
len = 0{ }
args = null
传递变长参数列表和直接传递变长参数类型的数组结果是一样的
static void print(int... args) {
if(args == null) {
System.out.println("args = null");
return;
}
StringBuilder sb = new StringBuilder();
sb.append("len = ");
sb.append(args.length);
sb.append("{ ");
for(int i=0;i<args.length;i++) {
sb.append(args[i]);
if(i != args.length-1) {
sb.append(", ");
}
}
sb.append(" }");
System.out.println(sb.toString());
}
public static void main(String[] args) {
print(1, 2, 3);//经过编译器改造也会把它变为数组类型
print(new int[] {1, 2, 3});
}
输出
len = 3{ 1, 2, 3 }
len = 3{ 1, 2, 3 }
相关文章
- [Java基础] java的守护线程与非守护线程
- JAVA-JSP内置对象之request获得参数的参数值(一个值)
- Java通过JNI调用C++程序
- Java虚拟机详解05----垃圾收集器及GC参数
- JAVA学习(一):Java介绍及其平台、开发环境的配置与搭建
- Java实现 LeetCode 785 判断二分图(分析题)
- Java实现 LeetCode 434 字符串中的单词数
- java实现第四届蓝桥杯梅森素数
- Java实现 泊松分酒
- Java实现 蓝桥杯VIP 算法训练 成绩的等级输出
- Java的一些基本术语
- 【JAVA】java中split以"." 、""、“|”分隔字符串
- 【JAVA】Java 异常中e的getMessage()和toString()方法的异同
- 【JAVA】java编译错误:编码UTF8/GBK的不可映射字符
- Atitit java播放器调音速率快慢的实现 目录 1.1. 原理 本质上是改变采样率即可1 2. 使用Java增加/降低AudioInputStream的音频播放速度(Increase/dec
- Simple Logging Facade for Java (SLF4J)作用(java日志框架)
- 【java】Java教程
- Java的输入与输出
- hibernate.validator.constraints.NotEmpty校验请求参数报错java.lang.NoClassDefFoundError: javax/el/PropertyNotFoundException
- Java学习路线-45:XML快速入门(1)- XML、DTD、JAXP、Schema
- Java:使用hutool工具类UrlBuilder、urlQuery构建url查询参数
- jxl创Excel档java示例代码说明
- Java程序猿从笨鸟到菜鸟之(九十二)深入java虚拟机(一)——java虚拟机底层结构具体解释
- java.lang.OutOfMemoryError: Java heap space
- java===java基础学习(9)---方法参数
- 基于JAVA实现的WEB端UI自动化 - WebDriver基础篇 - 元素定位
- JAVA开发讲义(一)-Java的自白
- Java可变参数demo