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基础白学了。