java可變參數(shù)
/**
* 測(cè)試可變參數(shù) variable可變 argument參數(shù)
*/
public class TestVariableArgument {
? ?public static int sum(int a, int b){
? ? ? ?//一般當(dāng)需要的形參列表的種類數(shù)量已知并且固定時(shí) 通過,將參數(shù)隔開一同傳進(jìn)方法
? ? ? ?int sum = a+b;
? ? ? ?System.out.println("和為"+sum);
? ? ? ?return sum;
? ?}
? ?public static int sum(int ... numbers){
? ? ? ?//當(dāng)需要的形參列表的種類已知但數(shù)量不確定的時(shí)候 通過可變參數(shù)來寫形參列表
? ? ? ?//格式 (類型 ... 形參名) 當(dāng)int實(shí)參傳進(jìn)方法時(shí)會(huì)被放到int[]數(shù)組numbers中 數(shù)組的長度為參數(shù)的數(shù)量
? ? ? ?int sum=0;
? ? ? ?for (int number:numbers){
? ? ? ? ? ?//參數(shù)放到數(shù)組中傳進(jìn)來 通過對(duì)數(shù)組遍歷來使用每一個(gè)參數(shù)
? ? ? ? ? ?sum +=number;
? ? ? ?}
? ? ? ?return sum;
? ?}
? ?public static int sum(double d,long l,int i,int...numbers){
? ? ? ?//方法只允許使用一個(gè)可變參數(shù) 如果還有其他參數(shù) 需要將可變參數(shù)放到形參列表的最后
? ? ? ?int sum=(int)d+(int)l+i;
? ? ? ?for (int j=0;j<numbers.length;j++){
? ? ? ? ? ?sum+=numbers[j];
? ? ? ?}
? ? ? ?return sum;
? ?}
// ? ?public static int sum(int[] numbers){
// ? ? ? ?//(int[]數(shù)組numbers)和(int...numbers)可變參數(shù)沖突 兩者不可重載
// ? ? ? ?int sum=0;
// ? ? ? ?for (int n:numbers){
// ? ? ? ? ? ?sum+=n;
// ? ? ? ?}
// ? ? ? ?return sum;
// ? ?}
? ?public static void main(String[] args) {
? ? ? ?sum(1,2);
? ? ? ?//調(diào)用方法時(shí)會(huì)優(yōu)先匹配固定參數(shù)列表的方法 上面定義了sum(a,b)方法 這里不會(huì)調(diào)用sum(int...numbers)
? ? ? ?System.out.println(sum(1,2,3,4,5,6,7));
? ? ? ?//只要是符合可變參數(shù)的類型 傳多少個(gè)參數(shù)都可以 這里傳入的不是數(shù)組 在方法內(nèi)部會(huì)生成數(shù)組存放這些參數(shù)
? ? ? ?sum(1.0,2L,5,2,3,4,5,6);
? ? ? ?//第一個(gè)是double 第一個(gè)是long 第三個(gè)是int ?從第四個(gè)開始會(huì)放入numbers[]數(shù)組中
? ? ? ?int[] n = {1,2,3,4,5};
? ? ? ?System.out.println(sum(n));
? ? ? ?//可以將數(shù)組傳進(jìn)來 數(shù)組會(huì)匹配可變參數(shù) 這也是定義方法時(shí)形參列表寫數(shù)組會(huì)和可變參數(shù)沖突的原因 可變參數(shù)支持傳入實(shí)參數(shù)組 但形參為數(shù)組時(shí)不支持傳入單一或多個(gè)變量參數(shù)
? ?}
}