铸造原始类型

时间:2014-10-14 20:00:32

标签: java

我是Java的初学者。经过长时间的尝试,我无法理解这条线。

byte num =(byte)135;

这一行给出结果-121为什么它是带符号的数字?

任何人都可以详细说明吗?

1 个答案:

答案 0 :(得分:8)

在Java中,byte始终是已签名的,并且它们位于-128127的范围内。当int文字135下传到byte时,结果为负数,因为第8位已设置。

 1000 0111

具体而言,JLS, Section 5.1.3,陈述:

  

有符号整数到整数类型T的缩小转换只会丢弃除n个最低位之外的所有位,其中n是用于表示类型T的位数。除了可能丢失有关幅度的信息之外数值,这可能导致结果值的符号与输入值的符号不同。

当您将int这样的135字面值转换为byte时,这是一种缩小的原始转换。