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;
就可以正确编译。
展开
 我来答
492800405
2011-01-31 · TA获得超过169个赞
知道小有建树答主
回答量:98
采纳率:0%
帮助的人:115万
展开全部
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" 需要在运算完才能再强转..
话说的有点罗嗦..希望能给你带来帮助.
智慧小岛
2011-02-03 · TA获得超过313个赞
知道答主
回答量:173
采纳率:0%
帮助的人:92.7万
展开全部
byte 也是数字类型 它的范围为-128到127 所以不用强转
b=(int)5; 没超出范围 就隐式转换了啊
而b=b*3;报错可能是因为编译器不知道 b*3的结果在不在byte的范围内吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
蓝天「
2011-01-31
知道答主
回答量:4
采纳率:0%
帮助的人:0
展开全部
java也提供了一个byte数据类型,并且是基本类型。java byte是做为最小的数字来处理的
byte b=(int)120 ,b存的值还是数字肯定成功,b=b*3;这是你类型转化错误
转化一下b=(byte)(b*3)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
秋雨寒草露
2011-01-31 · TA获得超过192个赞
知道小有建树答主
回答量:214
采纳率:0%
帮助的人:132万
展开全部
java中数据类型转换低级的向高级转换可以自动转换,因为不丢失数据!比如byte转换为int
但是高级向低级转换成高级的时候的时候可能会丢失数据,这个时候我们需要强制转换
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
rayronk
2011-01-31 · 超过22用户采纳过TA的回答
知道答主
回答量:101
采纳率:0%
帮助的人:82.6万
展开全部
蓝天说的很清楚了,主要是类型的范围问题,byte范围为-128到127,b=(int)120 : b存的时候没有超出byte的范围,所以正确,但是后面那条语句b*3的时候已经为360超出byte的范围了,需要丢失数据,即把前面的数据砍掉,只保留7位,所以必须把b*3的值转化为byte型才能重新赋给b,即b=(byte)(b*3)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式