一 、以下代码输出结果是【中国东北某著名软件公司 笔试题】
A、编译错误 B、 10.9 C、9 D、 以上答案都不对
如果你认为很简单,选择了C,那么即恰巧中了陷阱。
三目运算表达式结构:
ConditionalOrExpression ? Expression : ConditionalExpression
Java会根据运算符的经度类型进行自动类型转换,由于前面一个是10.9(double类型),因此后面的9也会自动变成9.0.因此选择D项。
自动类型转换的规则:
-
参与运算的数据类型不同,先转换成同一类型,然后进行运算。
-
转换按数据长度增加的方向进行,以保证精度不降低。例如int型和long型运算时,先把int量转成long型后再进行运算。
-
所有的 浮点运算 都是以双精度进行的,即使仅含 float 单精度量运算的表达式,也要先转换成double型,再作运算。
-
char型和short型参与运算时,必须先转换成int型。
-
在赋值运算中,赋值号两边的数据类型不同时,需要把右边表达式的类型将转换为左边变量的类型。如果右边表达式的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度
二、以下代码输出结果是()【中国著名网络软件公司 笔试题】
A、120 x B、120 120 C、x 120 D、以上答案都不对
int i = 10; 这里的i是一个变量,因此第一个输出x被提升为int类型,字符‘x’的int值为120,所以第一个输出的应该是120.
三目运算表达式结构:
ConditionalOrExpression ? Expression : ConditionalExpression
Java编程规范(文章最后有提供)里面提到,
If one of the operands is of type T where T is byte, short , or char , and the other operand is a constant expression (§15.28) of type int whose value is representable in type T, then the type of the conditional expression is T.
大致意思如下:
如果一个操作对象是T类型(T包括byte、short或者char)另一个操作对象是int类型常量表达式,而且值可以表示为T类型,那么输出结果是T类型。
因为10为int常量,可以被char表示,输出结果为char类型。
相关语言规范参见:#jls-15.25