问题描述
- Java byte或short类型赋值的小问题
-
把一个整数常量(其值在byte类型的表数范围内)赋值给byte类型变量,系统会把整数常量当做byte类型来处理还是当做int来处理
查了一些资料,一部分是直接当做byte类型处理,一部分说是当做int类型处理然后数据类型转换
byte b = 3;
解决方案
Java byte或short类型赋值时本质是作为int进行处理的,例如你定义了一个byte b = 120;
你可以反编译看代码javap -c查看编译后的字节码指令,这个本质上是作为int类型进行处理的。
解决方案二:
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;
这个转换显然发生在运行时。
解决方案三:
你好
常量超出数据类型表数范围的情况我大致了解一点,不明白的是在表数范围内的情况
我以为常量赋值给byte或short类型时会有一个数据检测,如果超出了范围就该常量就作为int类型数据处理
byte b= 257;——“Type mismatch: cannot convert from int to byte”
如果常量数值在范围内就蒙了...
时间: 2024-11-05 18:43:34