我正在讨论一些java面试问题MCQ,在那里我发现了这个代码片段,其中我不理解输出,尽管它只有2行代码。
int a = 8;
System.out.println(((a<8)? 9.9 : (int)9));输出是9.0我不明白为什么不是9?
发布于 2020-03-12 13:30:08
因为你没有把他们都投进去。您只是将第二个结果转换为int。
但是不要忘记,第一个结果是浮动,所以所有的结构都必须是相同的类型。您需要将它们都转换为相同的类型,如int或float。
int a = 8;
System.out.println(""+ (int)( (a<8)? 9.9 : 9));产出:
9发布于 2020-03-12 12:48:29
三元运算符具有在计算值之前定义的返回类型。因此,如果操作符可以同时返回float和int,那么这两个值都被向上转换到float。你的回答是这样的:
(int)9 -> (int)9 -> (float)9.其他情况:如果添加float和int,就会得到float。
int a = 2;
float b = 4.3f;
float c = a + b;发布于 2020-03-12 12:43:04
三元算子的返回类型是根据非常复杂的规则:Java语言规范确定的。具体而言,在你的情况下:
否则,二进制数字提升(§5.6.2)应用于操作数类型,条件表达式的类型是第二和第三个操作数的提升类型。
因此,在您的情况下,您将得到返回类型double。
https://stackoverflow.com/questions/60654293
复制相似问题