Java 可变长参数

举报
福州司马懿 发表于 2021/11/19 04:34:32 2021/11/19
【摘要】 原理 Java可变长参数列表的实现是通过编译器把把这些参数封装成一个数组来传递的。 注意点 可变成参数列表不能与同类型数组重载,因为它本身就是数组 void print(int... args) ...

原理

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 }
  
 

文章来源: blog.csdn.net,作者:福州-司马懿,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/chy555chy/article/details/53580359

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。