Java三元运算符难题

查找程序的输出

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。

确定条件表达式的结果类型的规则太长、太复杂,无法完整重现,但这里有三个关键点。

  1. 如果第二个和第三个操作数的类型相同,则为条件表达式的类型。换句话说,通过避开混合类型计算,可以避免整个混乱。
  2. 如果其中一个操作数为T类型,其中T为字节、短字符或字符,而另一个操作数为int类型的常量表达式,其值可在T类型中表示,则条件表达式的类型为T。
  3. 否则,将对操作数类型应用二进制数字提升,条件表达式的类型是第二个和第三个操作数的提升类型。

第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
喜欢就支持一下吧
点赞15 分享