java 强制类型转化:
为什么对变量byteb;来说b=(int)120;语句是正确的,而b=b*3;是错误的???为什么第一条语句不需要进行强制转化就能成功?【b=(byte)(int)120...
为什么对变量byte b;来说
b=(int)120;语句是正确的,而
b=b*3;是错误的???
为什么第一条语句不需要进行强制转化就能成功?【b=(byte)(int)120】
我不理解的地方在于为什么将120强制转换为int类型的时候赋值给b没有出错,但是将b*3复制给b的时候却会出错,而且出错的原因是因为“缺少一个转换(byte)”
ps:
还有一个疑问,当b的值为3的时候,b*3的值为9,没有超过byte类型的取值范围,但是编译器任然会报错,而必须进行类型转化(byte)(b*3),如果说是因为在赋值的过程中进行了隐含的类型转化,b*3经过运算变为了int类型的9的而必须进行强制类型转化的话,那么赋值语句是否等价为
b=(byte)(b*3); == b=(byte)((int)9);
如果是这样的话,那么为什么直接给b赋一个int类型的值编译器不会报错呢,比如下面语句 b=(int)5;
就可以正确编译。 展开
b=(int)120;语句是正确的,而
b=b*3;是错误的???
为什么第一条语句不需要进行强制转化就能成功?【b=(byte)(int)120】
我不理解的地方在于为什么将120强制转换为int类型的时候赋值给b没有出错,但是将b*3复制给b的时候却会出错,而且出错的原因是因为“缺少一个转换(byte)”
ps:
还有一个疑问,当b的值为3的时候,b*3的值为9,没有超过byte类型的取值范围,但是编译器任然会报错,而必须进行类型转化(byte)(b*3),如果说是因为在赋值的过程中进行了隐含的类型转化,b*3经过运算变为了int类型的9的而必须进行强制类型转化的话,那么赋值语句是否等价为
b=(byte)(b*3); == b=(byte)((int)9);
如果是这样的话,那么为什么直接给b赋一个int类型的值编译器不会报错呢,比如下面语句 b=(int)5;
就可以正确编译。 展开
5个回答
展开全部
byte b ;
b=120; //不会出错.是因为120java中默认是int型,也就是你在赋值的时候java中默认的转换成byte型了而byte型的存储范围是-128-127由int型120到byte型120并没超出byte的存储空间,所以不会报错,而如果你将其换成,128则会报"cannot convert from int to byte" 因为已经超出了存储范围了
b=(byte) 300; //解释同上
b = (byte)(b*3);//这个你除了要明白上面的问题你还要知道明白运算优先级,你原来的出错代码是b = b*3; 你在b*3的时候是运算出int型然后将360赋值给b,而此时你并没强转成byte型.所以会报错.你在强转的时候,(byte)b*3这样写实不行的.因为这涉及到优先级,你要知道这个运算时怎么执行的.先执行的(byte)b --->再执行的*3--->*3的运算结果是一个int型的所以依然要报"cannot convert from int to byte" 需要在运算完才能再强转..
话说的有点罗嗦..希望能给你带来帮助.
b=120; //不会出错.是因为120java中默认是int型,也就是你在赋值的时候java中默认的转换成byte型了而byte型的存储范围是-128-127由int型120到byte型120并没超出byte的存储空间,所以不会报错,而如果你将其换成,128则会报"cannot convert from int to byte" 因为已经超出了存储范围了
b=(byte) 300; //解释同上
b = (byte)(b*3);//这个你除了要明白上面的问题你还要知道明白运算优先级,你原来的出错代码是b = b*3; 你在b*3的时候是运算出int型然后将360赋值给b,而此时你并没强转成byte型.所以会报错.你在强转的时候,(byte)b*3这样写实不行的.因为这涉及到优先级,你要知道这个运算时怎么执行的.先执行的(byte)b --->再执行的*3--->*3的运算结果是一个int型的所以依然要报"cannot convert from int to byte" 需要在运算完才能再强转..
话说的有点罗嗦..希望能给你带来帮助.
展开全部
byte 也是数字类型 它的范围为-128到127 所以不用强转
b=(int)5; 没超出范围 就隐式转换了啊
而b=b*3;报错可能是因为编译器不知道 b*3的结果在不在byte的范围内吧
b=(int)5; 没超出范围 就隐式转换了啊
而b=b*3;报错可能是因为编译器不知道 b*3的结果在不在byte的范围内吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
java也提供了一个byte数据类型,并且是基本类型。java byte是做为最小的数字来处理的
byte b=(int)120 ,b存的值还是数字肯定成功,b=b*3;这是你类型转化错误
转化一下b=(byte)(b*3)。
byte b=(int)120 ,b存的值还是数字肯定成功,b=b*3;这是你类型转化错误
转化一下b=(byte)(b*3)。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
java中数据类型转换低级的向高级转换可以自动转换,因为不丢失数据!比如byte转换为int
但是高级向低级转换成高级的时候的时候可能会丢失数据,这个时候我们需要强制转换
但是高级向低级转换成高级的时候的时候可能会丢失数据,这个时候我们需要强制转换
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
蓝天说的很清楚了,主要是类型的范围问题,byte范围为-128到127,b=(int)120 : b存的时候没有超出byte的范围,所以正确,但是后面那条语句b*3的时候已经为360超出byte的范围了,需要丢失数据,即把前面的数据砍掉,只保留7位,所以必须把b*3的值转化为byte型才能重新赋给b,即b=(byte)(b*3)。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询