2 scabc5501 scabc5501 于 2016.02.07 10:05 提问

Java byte或short类型赋值的小问题

把一个整数常量(其值在byte类型的表数范围内)赋值给byte类型变量,系统会把整数常量当做byte类型来处理还是当做int来处理
查了一些资料,一部分是直接当做byte类型处理,一部分说是当做int类型处理然后数据类型转换
byte b = 3;

3个回答

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.02.07 11:20
已采纳

Java byte或short类型赋值时本质是作为int进行处理的,例如你定义了一个byte b = 120;
你可以反编译看代码javap -c查看编译后的字节码指令,这个本质上是作为int类型进行处理的。

caozhy
caozhy   Ds   Rxr 2016.02.07 10:11

http://ideone.com/HCUZVC
看这个代码

byte b= 257;
无法编译

说明对于常数,编译器是直接编译的,而不是运行时的转换,所以根本不让编译。

    int x = 3;
    byte b = x;

此时x是int变量,编译器提示
incompatible types: possible lossy conversion from int to byte

同样不能编译。如果要通过编译,需加上转换

byte b = (byte)x;

这个转换显然发生在运行时。

scabc5501
scabc5501   2016.02.07 10:48

你好
常量超出数据类型表数范围的情况我大致了解一点,不明白的是在表数范围内的情况
我以为常量赋值给byte或short类型时会有一个数据检测,如果超出了范围就该常量就作为int类型数据处理
byte b= 257;——“Type mismatch: cannot convert from int to byte”
如果常量数值在范围内就蒙了...
图片说明

caozhy
caozhy 这种描述含糊不清,什么叫做“系统”,编译器、jvm还是操作系统。建议你不要看这些不严谨的书。以我说的为准。
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!