java 可变参数_java基础---->可变参数

Java1.5增加了新特性:可变参数:适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。注意:可变参数必须位于最后一项。当可变参数个数多余一个时,必将有一个不是最后一项,所以只支持有一个可变参数。因为参数个数不定,所以当其后边还有相同类型参数时,java无法区分传入的参数属于前一个可变参数还是后边的参数,所以只能让可变参数位于最后一项。

可变参数的特点:

(1)只能出现在参数列表的最后;

(2)...位于变量类型和变量名之间,前后有无空格都可以;

(3)调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中一数组的形式访问可变参数。

public class Varable {

public static void main(String [] args){

System.out.println(add(2,3));

System.out.println(add(2,3,5));

}

public static int add(int x,int ...args){

int sum=x;

for(int i=0;i

sum+=args[i];

}

return sum;

}

}

然而,使用可变参数时,要注意几个问题:

1) 可变参数方法与数组参数方法重载时

//带数组参数的方法

public void hello(String[] params) {

System.out.println("执行带数组参数的方法,数组长度为:" + params.length);

}

//带可变参数的方法

public static void hello(String... params) {

System.out.println("执行带可变参数的方法,参数个数为:" + params.length);

}

编译错误:Duplicate method hello(String[])

2)可变参数方法与无参数方法重载时

//带可变参数的方法

public static void hello(String... params) {

System.out.println("执行带可变参数的方法,参数个数为:" + params.length);

}

//不带参数的方法

public static void hello() {

System.out.println("执行不带参数的方法");

}

public static void main(String[] args) {

hello(); //执行不带参数的方法

}

3)重载情况三:可变参数的类型和前面非可变参数类型一样

// 带可变参数的方法

public static void hello(String... params) {

System.out.println("执行带可变参数的方法,参数个数为:" + params.length);

}

// 带固定参数和可变参数

public void hello(String param1, String... params) {

System.out.println("执行带固定参数和可变参数的方法,参数个数为:" + params.length);

}

当用一下代码调用时,下面代码所在行报编译出错The method hello(String[]) is ambiguous

hello("1", "2", "3");

4)可变参数方法与可变参数方法重载时

static void f(float i, Character... args) {

System.out.println("first");

}

static void f(Character... args) {

System.out.print("second");

}

当用下面代码时候

f(1,'2');

没有问题

但当用下面代码调用时

f('1','2');

该行代码报编译错误The method f(float, Character[]) is ambiguous

基本类型由低级到高级分别为 (byte,short,char)--int--long--float--double,低级变量可以直接转换为高级变量,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值