我正在阅读原语及其包装类的转换规则,我觉得在不同的上下文中有不同的转换行为和规则。我有两个案例/背景介绍。
案例1:切换语句
Integer x = 10;
final byte a = 3;
System.out.println(x == a); // work fine
switch (x) {
case a: // Type mismatch: cannot convert from byte to Integer
System.out.println("It’s OK.");
}
在比较字节和整数时看看这个,它工作正常,但在交换机中它会给出错误。为什么呢?
案例2:方法调用 如果在方法调用期间没有确切的类型匹配,我会读到java转换为下一个大类型。例如
public static void one(int i, long n){System.out.println("first");}
public static void one(double i, int n){System.out.println("three");}
// call
one(13, 12); // The method one(int, long) is ambiguous for the type Method
它应该根据规则调用第一个方法,因为int旁边的long更大。那么这两种情况的规则是什么?
答案 0 :(得分:1)
案例1:使用运算符,byte,char和short会自动转换为int,因此System.out.println(x == a);
是可以的。 Bu for switch规则无效。
情况2:Java不知道12
是long还是int,因为你可以写一个长12
和12L
。因此,更改为12L
可以清除模糊性