Java中给byte变量直接赋值可以自动转换,但为什么把int变量赋给byte变量需要强制转换,同样是int。

例如:byte b=100;System.out.println(b);不报错。
但是,int i = 100;byte b=i;System.out.println(b);报错;
int i = 100;byte b=(byte)i;System.out.println(b);不报错;

是这样的,整型直接量在没有加后缀的时候默认为int,但是当它被赋值给某个变量(这个变量是short型,int型,byte型中的一种)时,则会自动转化成相对应的类型。
比如说byte a=127;这里的127在没有赋值给a时默认是int型,赋值时自动调为byte型,并赋给a。
但是,如果出现这样的情况:
int a=12;//此处a已经确定是int型
byte b=(byte)a;/**此处必须强制转
换!因为a已经确
定是int型,必
须转化成byte型
**/
温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-06-11
因为编译器很智能啊,属于byte范围内的整数编译期就不报错
但int变量的值即使属于byte范围内,赋值给byte也是报错,因为超范围了
int的100内存中也是占4个字节,而byte只占1个字节,4个字节的赋值给一个1字节当然要强转
第2个回答  2018-06-11

1、类型转换主要在在 赋值、方法调用、算术运算 三种情况下发生。
a、赋值和方法调用 转换规则:从低位类型到高位类型自动转换;从高位类型到低位类型需要强制类型转换:
(1)布尔型和其它基本数据类型之间不能相互转换;
(2)byte型可以转换为short、int、、long、float和double;
(3)short可转换为int、long、float和double;
(4)char可转换为int、long、float和double;
(5)int可转换为long、float和double;
(6)long可转换为float和double;
(7)float可转换为double; 

另外还有是直接数的赋值:先通过直接数判断其类型,然后基本原则和上面谈到的赋值原则基本一致;只是直接数是整数时特殊一点,当在可表示范围内时,可以直接赋值给 byte short char三种类型;

网页链接

本回答被提问者采纳
第3个回答  2018-06-11
int型的精度比byte型高,从byte转换到int型是向上转型,不需要强制转换;而从int型转换到byte型是向下转型,可能丢失精度,必须强制转换。
第4个回答  2018-06-11
byte是8位 取值范围: -128-127 ,所有byte都是一个int,
int是32位 取值范围:-2147483648-2147483647 int不一定是byte
int的范围大
相似回答