[问题记录]Java关于可变参数重载问题

突然发现java的可变参数重载是存在歧义的,只是不知道java内部是怎么处理的,特意做如下实验:

测试代码如下:

 1 /**
 2  * Created by ieayoio on 16-3-1.
 3  */
 4 public class VarTest {
 5
 6     public static void aaa(int ...a){
 7         System.out.println("可变参数重载");
 8     }
 9
10     public static void aaa(int a){
11         System.out.println("非可变参数重载");
12     }
13     public static void main(String[] args) {
14
15     }
16 }

1.在14行添加aaa();时运行结果为:

可变参数重载

Process finished with exit code 0

2.在14行添加aaa(111,111);时运行结果为:

可变参数重载

Process finished with exit code 0

3.在14行添加aaa(111);时运行结果为:

非可变参数重载

Process finished with exit code 0

4.将代码改为以下:

 1 /**
 2  * Created by ieayoio on 16-3-1.
 3  */
 4 public class VarTest {
 5
 6     public static void aaa(int a){
 7         System.out.println("非可变参数重载");
 8     }
 9
10     public static void aaa(int ...a){
11         System.out.println("可变参数重载");
12     }
13
14     public static void main(String[] args) {
15         aaa(111);
16     }
17 }

结果依然为:

非可变参数重载

Process finished with exit code 0

结论:当使用可变参数重载方法时,java内部会优先使用非可变参数方法去执行程序

原文链接:http://www.cnblogs.com/ieayoio/p/5231751.html

时间: 2024-10-10 09:23:52

[问题记录]Java关于可变参数重载问题的相关文章

五分钟学Java:可变参数究竟是怎么一回事?

在逛 programcreek 的时候,我发现了一些专注基础但不容忽视的主题.比如说:Java 的可变参数究竟是怎么一回事?像这类灵魂拷问的主题,非常值得深入地研究一下. 我以前很不重视基础,觉得不就那么回事嘛,会用就行了.就比如说今天这个主题,管它可变不可变呢,不就是个参数嘛,还能有多大学问--抱着这种态度,我一直横行江湖近十载(苦笑).可等到读者找我提一些基础的问题时,我几乎回答不上来,感觉知识是散的,或者是浮于表面的.幸好最近一段时间,我开始幡然醒悟,开始不放过任何一个细节,渐渐地,有点"

java之 ------ 可变参数和卫条件

可变参数:适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理. 可变参数必须位于最后一项.当可变参数个数多于一个时,必将有一个不是最后一项,所以只支持有一个可变参数. 可变参数的书写形式如: int add(int x,int ...args){  方法体 } ... 位于变量类型和变量名之间,前后有无空格都可以: 调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数. 条件逻辑判断型的应用(模拟人工推理) /* 有人邀请A,B,C,D,

巩固java(六)----java中可变参数方法(非常实用哦)

java提供了可变参数的方法,即方法的参数个数可以不确定,用"..."定义. import java.util.ArrayList; import java.util.List; public class VariableParameter { //求若干个整型数中的最大值 public int getMax(int... items){ //定义可变参数items int max = Integer.MIN_VALUE; //次数为int能表示的最小值,值为-2147483648 f

Java基础-可变参数

大家都知道main方法的参数就是一个数组类型的,那么它其实也是可以改成不定参数类型.我试了试,并调用了一些弹出来的方法. public class ClassC2 { public static void main(String...args) { System.out.println(args.getClass()); //Exception in thread "main" class [Ljava.lang.String; System.out.println("===

Java之可变参数

Java中支持可变参数 意思就是:参数的个数可以根据需要写,你可以写1个.2个.3个....他们都被保存到一个参数的数组中. 但是这些参有一些约束:他们必须是同类型的,比如都是String字符串类型. 同时,可变参数的函数中的参数的写法也有约束:比如,可变参数的数组必须写在参数的最后,否则程序不知道你的参数到底有多少个. 例子:输出可变参数中的参数值 public class VariableArgument {    public static void main(String[] args)

c#中和java中可变参数对比

c#中可变参数用关键字params Code public class App { static void Main() { //常规使用方法 Console.WriteLine( Add( new Int32[] { 1, 2, 3, 4, 5 } ) ); //另一种调用方法 Console.WriteLine( Add( 1, 2, 3, 4, 5 ) ); //当然,参数数目是可变的,但其类型是被约束的 Console.WriteLine( Add( 1, 2, 3, 4, 5, 6,

18、Java中可变参数

从JDK 1.5之后,Java允许定义形参可变的参数 例如: public void test(int a,String ... books){ for(String book:books){ System.out.println(book) } } 调用: test(1,"JAVA疯狂讲义","零基础javascript"); 这里的books就是一个可变参数,可以当做一个数组使用 注意: 1:可变参数必须是最后一个参数 2:一个方法中最多只能定义一个可变参数 和

Java中可变参数

从java5开始出现了可变参数,这是对java方法及数组的拓展! 方法中可以接受的参数不再是固定个数的,而是随着具体需求传递的多少来决定. 定义格式: 返回值类型  方法名(参数类型 ... 形式参数){    } 可变参数的特点: 只能出现在参数列表的最后: ... 位于变量类型和变量名之间,前后有无空格都可以; 调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数. package reviewDemo; import java.util.Arrays

java——慎用可变参数列表

说起可变参数,我们先看下面代码段,对它有个直观的认识,下方的红字明确地解释了可变参数的意思: 1 public class VarargsDemo{ 2 3 static int sum(int... args) { 4 int sum = 0; 5 for(int arg:args) 6 sum += arg; 7 return sum; 8 } 9 public static void main(String args[]) throws FileNotFoundException { 10