java可变参数列表

java可变参数列表应用于参数个数或类型未知的场合,可变参数列表可以是基本类型、复合类型(包装器类型)、String类型、Object类型等,也可以是基本类型和其他类型的组合,具体表现形式如下: static void f(Object...args){} void f(String...args){} void f(float f,Character...args){} java中的自动包装机制(自动拆装箱):装箱:将基础数据类型(如int)转换成基础类型封装类的对象(如new Integer())拆箱:将基础类型封装类的对象(如new Integer())转化成基础数据类型(如int) public class X { static void f(Object...args){ for(Object obj : args) System.out.print(obj+" "); System.out.println(); } public static void main(String[] args) { f(new Integer(1),new Float(2.3f),new Double(4.5)); f(1,3,5,7); f("one",'a',24,99.99);//可以输入任意基本类型及其组合 } /*output 1 2.3 4.5 1 3 5 7 one a 24 99.99 */ } 可变参数列表必须是最后一项,如下所示 public class Y { static void f(int i,String...args){ System.out.print(i+" "); for(Object obj : args) System.out.print(obj+" "); System.out.println(); } public static void main(String[] args) { f(1,new String[]{"aa","bb","cc"}); f(2,"one","two","three"); //f(1,"one","two",new String[]{"three","four"});这种传参方式是错误的 } /*output 1 aa bb cc 2 one two three */ } 可变参数列表与自动包装机制和谐共处: public class Z { static void f(Integer...args){ for(Object obj : args) System.out.print(obj+" "); System.out.println(); } public static void main(String[] args) { f(1,3,5); f(2,new Integer(4),new Integer(6),8); f(new Integer(10),new Integer(11)); } /*output 1 3 5 2 4 6 8 10 11 */ } 在Thinking in java 中有这样一个例子,方法重载时,其中一方法带有非可变参数,另一方法只含有可变参数列表,编译时会报错 public class XZ{ static void f(float f,Character...args){ System.out.print("first "); for(Object obj : args) System.out.print(obj+" "); System.out.println(); } static void f(Character...args){ System.out.print("Second "); for(Object obj : args) System.out.print(obj+" "); System.out.println(); } public static void main(String[] args) { f(1.1f,'a'); f('a','b'); } } 而对上面例子进行如下修改后(给这两个方法都加一个非可变参数),运行通过: public class YZ{ static void f(float f,Character...args){ System.out.print("first "); for(Object obj : args) System.out.print(obj+" "); System.out.println(); } static void f(char c,Character...args){ System.out.print("Second "); for(Object obj : args) System.out.print(obj+" "); System.out.println(); } public static void main(String[] args) { f(1.1f,'a'); f('a','b'); } /*output first a Second b */ } 看上去似乎可以得到这样一个结论:在可变参数列表相同情况下,重载方法要么都含非可变参数,要么都不含非可变参数。但是接下来的这段代码似乎又不支持以上观点: public class ZZ{ static void f(float f,String...args){ System.out.print("first "); for(Object obj : args) System.out.print(obj+" "); System.out.println(); } static void f(String...args){ System.out.print("Second "); for(Object obj : args) System.out.print(obj+" "); System.out.println(); } public static void main(String[] args) { f("aa","dd"); f(3.6f,"ee","gg"); } /*output Second aa dd first ee gg */ } 所以路过的大神可以解释一下吗?

你可能感兴趣的:(编程语言,java)