Java之可变参数

与C预言类似,Java中也有可变参数的形式。其格式如下:

public static void printInteger(int... integers);

在接收参数的时候,其参数格式可以是不定的,例如:

package com.example.vararguments;

public class Main {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        printInteger();				//无输出
        printInteger(1);			//输出1
        printInteger(1, 2);			//输出1 2
        printInteger(1, 2, 3);			//输出1 2 3
    }

    public static void printInteger(int... integers) {
        for (int i : integers) {
            System.out.print(i + " ");
        }
        System.out.println();
    }
}

可变参数的形式类似于数组。在编译时,编译器会将最后一个可变形参转化为数组形参, 并在编译出的class文件里作上一个记号,表明这是个实参个数可变的方法。例如, 如果在类中再声明一个以数组作为形参的同名函数,将会报编译错误:

public static void printInteger(int [] integers);	//编译错误,Duplicate method


而且,可以用数组实参来调用上述可变函数:

printInteger(new int [] {1, 2, 3, 4});		//输出1 2 3 4

但是,如果函数声明为数组形参,那么将不可以可变实参的形式调用该方法,例如:

package com.example.vararguments;

public class Main {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        printInteger(1, 2, 3);			//编译错误
        printInteger(new int [] {1, 2, 3, 4});	//正确输出1 2 3 4
    }
    public static void printInteger(int [] integers) {
        for (int i : integers) {
            System.out.print(i + " ");
        }
        System.out.println();
    }
}

可变参数的另一个特点是:可变形参只能作为函数的最后一个形参,在其后面不能够再有其他形参,如:

public static void printInteger(int... integers, int count) 	//编译错误:The variable argument type int of the method printInteger must be the last parameter

同时,如果同时存在可变参数与固定参数,那么固定参数的优先级将会高于壳边参数,如下:

package com.example.vararguments;

public class Main {

    /**
     * @param args
     */
    public static void main(String[] args) {
        printInteger(1, 2);				//输出:in fixed arguments: 1 2,说明调用了固定参数
    }

    public static void printInteger(int... integers) {
        System.out.print("in var arguments: ");
        for (int i : integers) {
            System.out.print(i + " ");
        }
        System.out.println();
    }
    
    public static void printInteger(int n1, int n2) {
        System.out.println("in fixed arguments: " + n1 + " " + n2);
    }
    
}

总结:

1、可变形参类似于数组,可以以数组实参进行调用,反之则不行

2、可变形参必须作为最后一个参数存在。

3、可变形参的优先级低于固定形参。


参考文章:http://blog.csdn.net/justinavril/article/details/4674305




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值