java – 为什么类型提升优先于重载方法的varargs
发布时间:2020-12-14 16:36:24 所属栏目:Java 来源:网络整理
导读:public class Test{ public static void printValue(int i,int j,int k) { System.out.println("int"); } public static void printValue(byte...b) { System.out.println("long"); } public static void main(String... args) { byte b = 9; printValue(b,b
public class Test { public static void printValue(int i,int j,int k) { System.out.println("int"); } public static void printValue(byte...b) { System.out.println("long"); } public static void main(String... args) { byte b = 9; printValue(b,b,b); } } 上面代码的输出是“int”.但它应该是“长”因为字节类型参数函数已经存在.但是这里的程序正在将字节值提升为int,但情况并非如此. 有人可以澄清这里发生了什么吗? 解决方法
在重载方法的情况下,变量参数方法将始终是编译器选择的最后一个方法.将字节提升为int(扩展转换)将优先于采用var-arg参数的方法.
这背后的原因是语言需要向后兼容.较旧的功能将优先于较新的功能.理解JLS关于变量参数的说法的一种简单方法是扩大将击败拳击和拳击将击败var-args. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |