当前位置: 首页 > 面试题库 >

Java-从Int到Short的显式转换

吴镜
2023-03-14
问题内容

有人可以解释以下原因的原因:

short value = (short) 100000000;
System.out.println(value);

给我:

-7936

知道Java中short的最大值是32767正确吗?


问题答案:

根据您的价值1亿,我得到-7936。如果将1亿变为100万,我只能得到16960。

原因是short值限制在-32768到+32767之间,并且Java在转换为a时仅保留最低有效16位short(缩小的原始转换,JLS
5.1.3
)。有效地执行此操作:100万个mod
2 ^ 16(a中的16位short)是16960。



 类似资料:
  • 问题内容: 我已经定义了数组gx,数组arr为短型。但是为什么左边的运算可能会以int类型结束,而我必须将其转换为short?编译器错误可能是从int到short的有损转换。 这是我的代码。 } 那是因为所谓的拆箱吗?因此,这意味着我每次进行手术时都需要进行投射吗? 问题答案: 它不是开箱;这是“二进制数值提升”。 JLS的第5.6.2节规定: 当运算符将二进制数字提升应用于一对操作数时,每个操作

  • 我一直在尝试编译,并玩了一圈的和数,但仍然不能弄清楚错误是什么。有什么想法吗? 标题:

  • 问题内容: 我的一位同事向我问了这个问题,我有些困惑。 该声明 编译很好但是 不 Java在这里做什么? 问题答案: int i = 123456; short x = 12; x += i; 实际上是 而仅仅是。它不会自动转换为a ,因此会导致错误(类型为)。 形式的复合赋值表达式等效于,其中是的类型,不同之处在于该表达式仅被评估一次。 - JLS§15.26.2

  • 问题内容: 分配;不会产生编译错误,但在运行时会生成。为什么编译器无法检测到此错误? 问题答案: 通过使用强制转换,你实际上是在告诉编译器“相信我。我是专业人士,我知道我在做什么,我知道尽管不能保证,但是我告诉你这个变量肯定是会成为一只狗。” 由于动物实际上不是狗(它是动物,你可以做;,也可能是狗),因此VM在运行时会引发异常,因为你违反了这种信任(你告诉编译器一切都会好的,并且不!) 编译器比盲

  • 问题内容: 我有三个简短的变量。当我将两个加在一起并将结果分配给第三个时,eclipse告诉我需要将其强制转换为short! 但是,当我先进行简单分配,然后进行增量分配时,一切都很好。 为什么是这样 ? 问题答案: JLS(第15.8.2节)说: “将二进制+运算符应用于两个数字类型的操作数时,将执行加法运算,从而得出这些操作数之和。” “对操作数执行二进制数值提升(第 5.6.2节 )。” 这意