【发布时间】:2016-03-26 16:14:30
【问题描述】:
我有这个代码:
public class First
{
public static void main(String[] args)
{
byte b=50;
byte c=b*2; //Error
byte d=50*2; //d=100
byte e=(byte)258; //e=258%256;
byte f=(byte)128; //f=128%256;
}
}
- 我知道任何涉及
byte的算术表达式都是第一 提升为int,然后执行。因此我期望d=50*2也报错,因为50*2的结果是int值,我们将其存储在byte中,没有任何显式类型转换。 如果 Java 隐式进行强制转换,为什么c=b*2会报告 错误? - 我知道如果我想存储一个值
不在
byte变量的范围内,那么我必须显式键入 将其转换为byte并且将存储的值就是该值 模 256(字节大小)。所以,byte f=(byte)128为什么会返回-128?由于128 % 256 = 128,所以我期望的是f=128,但它返回-128。为什么?
非常感谢。
【问题讨论】:
-
50*2 是编译时的常量。 128 超出字节范围。
标签: java int type-conversion byte type-promotion