切换和方法调用中的Java初始转换

时间:2017-08-25 13:15:03

标签: java

我正在阅读原语及其包装类的转换规则,我觉得在不同的上下文中有不同的转换行为和规则。我有两个案例/背景介绍。

案例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更大。那么这两种情况的规则是什么?

1 个答案:

答案 0 :(得分:1)

案例1:使用运算符,byte,char和short会自动转换为int,因此System.out.println(x == a);是可以的。 Bu for switch规则无效。 情况2:Java不知道12是long还是int,因为你可以写一个长1212L。因此,更改为12L可以清除模糊性