给人做网站能赚钱吗,哪个网站做外单出口好,南昌公司建设网站费用,北京丰台网站建设公司在Java5 中提供了变长参数#xff08;varargs#xff09;#xff0c;也就是在方法定义中可以使用个数不确定的参数#xff0c;对于同一方法可以使用不同个数的参数调用#xff0c;调用的时候可以给出任意多个参数也可不给参数.如method(Object...objs){...} . 调用时的代… 在Java5 中提供了变长参数varargs也就是在方法定义中可以使用个数不确定的参数对于同一方法可以使用不同个数的参数调用调用的时候可以给出任意多个参数也可不给参数.如method(Object...objs){...} . 调用时的代码是:method(str) 或者method(null),method(张三,李四,王五).但是如果出现下面的情况,可就麻烦了,不多说,看代码:public class Client { //简单折扣计算 public void calPrice(int price,int discount){ float knockdownPrice price * discount / 100.0F; System.out.println(折扣后的价格:formateCurrency(knockdownPrice)); } //复杂多折扣计算(出现在折上折需求上) public void calPrice(int price,int... discounts){ float knockdownPrice price; for(int discount:discounts){ knockdownPrice knockdownPrice * discount / 100; } System.out.println(折上折后的价格:formateCurrency(knockdownPrice)); } //格式化成本的货币形式 private String formateCurrency(float price){ return NumberFormat.getCurrencyInstance().format(price/100); } public static void main(String[] args) { Client client new Client(); //499元的货物打75折 client.calPrice(49900, 75); } 程序调用了最终调用了非变长参数的方法,因为java在编译时,首先会根据实参的数量和类型来进行处理,而且确定是否符合方法签名条件,而两个重载方法中,int类型的是一个原生数据类型,而多变参数实际上是一个数组对象,编译器偷懒于是先从简单的方法签名开始,如果符合条件,即可编译通过,于是就出现了这种情况。下面变长参数方法还有一种情况挺烦人的,看代码:public class Client { public void methodA(String...strs){ } public void methodA(Integer...ints){ } public static void main(String[] args) { Client client new Client(); //调用方法 client.methodA(null); //编译出错 } 为什么会编译编译出错了两个方法重载是没问题的,但是在调用时,传入的参数直接使用实参数值,这样java编译器无法判断null属于何种数据对象.不仅仅调用者需要猜测该调用哪个方法,而且被调用者也可能产生内部逻辑混乱的情况. 这个问题的解决方案有两种:1 调用methodA方法时,设置null一个类型,将变量作为参数传入.2 methodA方法不重载,将其中的一个方法名改掉. 转载于:https://blog.51cto.com/javacrazy/1375511