当前位置: 首页 > 知识库问答 >
问题:

如果在三元运算符中使用局部变量,为什么从int到short的缩小转换不起作用

慕通
2023-03-14
short b = true ? 1 : 1;

而接下来的两行代码会导致编译错误(不兼容的类型:从int到short的转换可能有损):

boolean bool = true;
short s = bool ? 1 : 1;

为什么编译器不能在第二种情况下对基元整数1执行相同的缩小转换?

共有1个答案

卜和悌
2023-03-14

正如@aioobe在评论中所概述的:

这是因为在第一种情况下,由于true是一个编译时常量,整个表达式在编译时计算,因此您基本上只有短b=1;而在第二种版本中,编译器没有为您进行简化,因此出现错误

在变量bool的声明中添加final使其成为一个常量变量,这也允许编译器如上所述解释代码。

final boolean bool = true;
short s = bool ? 1 : 1;
 类似资料:
  • 问题内容: Netbeans说我的三元运算符不是语句。怎么会? 我尝试过if / then / else对应项,并且工作正常: 问题答案: 三元运算符中的语句必须是非空的。他们需要退货。

  • 问题内容: 我在开发过程中注意到了这一点。 为什么三元运算符不能在方法参数中使用?这显然是或(其他)。 问题答案: 表达式的类型为,因为这是()和()的常见类型。 您没有任何接受的方法。因此,编译错误。

  • 问题内容: 这段代码有什么问题: 问题答案: 三元运算符不能有不返回值或方法的语句。您需要具有返回值的语句。 您需要重写它。

  • targetPixValList是一个包含Double对象的列表,它也包含列表中连续位置的相似值,当我尝试使用Code_1比较两个Double值时,cnt返回零。当我使用code_2时,cnt返回值。 列表的类型是 为什么“==”运算符不能与Double一起使用? 代码_1: Code_2:

  • 问题内容: 有人可以解释以下原因的原因: 给我: 知道Java中short的最大值是32767正确吗? 问题答案: 根据您的价值1亿,我得到-7936。如果将1亿变为100万,我只能得到16960。 原因是值限制在-32768到+32767之间,并且Java在转换为a时仅保留最低有效16位(缩小的原始转换,JLS 5.1.3 )。有效地执行此操作:100万个mod 2 ^ 16(a中的16位)是1