java基础感觉白学了
且看代码:
char x = 'X'; int i = 0; System.out.println(true ? x : 0);// 1 System.out.println(true ? x : i);// 2
运行结果:
X
88
为什么会出现上面这种情况?
确定条件表达式结果类型的规则有以下3点:
1 如果表达式1和表达式2操作数具有相同的类型,那么它就是条件表达式的类型。
2 如果一个表达式的类型是byte、short、char类型的,而另外一个是int类型的常量表达式,且它的值可以用类型byte、short、char三者之一表示的,那么条件表达式的类型就是三者之一
3 否则,将对操作数类型进行二进制数字提升,而条件表达式的类型就是第二个和第三个操作数被提升之后的类型
这时我们发现:
注释1中,按照规则2来看,0是int类型常量表达式,返回结果就是x变量的类型,即char类型;
注释2中,按照规则3来看,x变量和i变量类型不一致,提升后的类型就变成了int,即输出char类型对应的int值。
这是一个坑,初学者甚至是工作经验不是很长的程序员都应该注意,要不然真感觉java1基础白学了。