我同意这段代码:
var y = switch (0) {
case 0 -> '0';
case 1 -> 0.0F;
case 2 -> 2L;
case 3 -> true;
default -> 4;
};
System.out.println(y);
System.out.println(((Object) y).getClass().getName());
返回此结果:
0
java.lang.Character
但是如果您删除布尔值:
var y = switch (0) {
case 0 -> '0';
case 1 -> 0.0F;
case 2 -> 2L;
default -> 4;
};
System.out.println(y);
System.out.println(((Object) y).getClass().getName());
返回这个:
48.0
java.lang.Float
我想这个结果是出乎意料的。
true ? '0' : false
返回字符一样,是因为它需要进行装箱操作,而true ? '0' : 0.0f
返回浮点数是因为会发生二进制数字升级。 - Andy Turner