查找程序的输出
null
public class GFG { public static void main(String[] args) { char x = 'X' ; int i = 0 ; System.out.print( true ? x : 0 ); System.out.print( false ? i : x); } } |
解决方案: 如果你运行这个程序,你会发现它会打印 X88 .第一个打印语句打印X,第二个打印88。
确定条件表达式的结果类型的规则太长、太复杂,无法完整重现,但这里有三个关键点。
- 如果第二个和第三个操作数的类型相同,则为条件表达式的类型。换句话说,通过避开混合类型计算,可以避免整个混乱。
- 如果其中一个操作数为T类型,其中T为字节、短字符或字符,而另一个操作数为int类型的常量表达式,其值可在T类型中表示,则条件表达式的类型为T。
- 否则,将对操作数类型应用二进制数字提升,条件表达式的类型是第二个和第三个操作数的提升类型。
第2点和第3点是这个谜题的关键。在程序中的两个条件表达式中,一个操作数是char类型,另一个是int类型。在这两个表达式中,int操作数的值都是0,可以用char表示。然而,只有第一个表达式中的整型操作数是常量(0);第二个表达式中的整型操作数是变量(i)。因此,第2点适用于第一个表达式,其返回类型为char。第3点适用于第二个条件表达式,其返回类型是对int和char应用二进制数字提升的结果,即int。
条件表达式的类型决定了调用打印方法的哪个重载。第一句话, 打印流。打印 (char)被调用;第二个是PrintStream。打印(int)。前者重载将变量x的值打印为Unicode字符(x),而后者将其打印为十进制整数(88)。
本文由 Shubham Juneja .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 贡献极客。组织 或者把你的文章寄到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。
如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END