今天无意中看到我之前做的一个关于java面试题的小测试 ,发现今天还是不懂。如下面的代码:
private static void out(){
char x='x';
int i=10;
System.out.println(false?i:x);
System.out.println(false?10:x);
}
上面打印的结果是:
120
x
第一条打印结果应该是可以理解的,char类型像int类型转化了,但是第二条语句就不能理解了,当时有很多错误的猜测。
结果我的一很牛叉的同事很好的解释了这个问题。就是如果在这个三目表达式中,如果其中一个类型为常量,则按照变量的类型进行转换,前提是这个常量能被变量的类型表示。下面这个链接的15.25很好的解释了上面的问题。
http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#290293
什么叫常量能被变量的类型表示呢?
10肯定是可以被char类型表示的
byte short int long都是带符号的整数,而char是无符号的。如 -10就不能被char类型表示。
如:System.out.println(false?-10:x); 这句话打印出来的结果就是x。所以一切问题就迎刃而解啦~~