A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 花开~的季节 黑马帝   /  2012-2-20 17:52  /  1714 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

byte b=3;
b=3+4;
java 中计算默认的int 3+4=7为int类型,它赋值给byte不损失精度么,从int到byte强行转换应该加byte,而这个没加怎样它自动转成了byte
求帮助呀!!!!

9 个回复

倒序浏览
本帖最后由 许涛 于 2012-2-20 20:09 编辑

先前会错题意了


b=3+4 ;应该是类似于 byte b=3;         它是一个自动转换过程,只要等号右边的数据在byte范围内(-128~127),就会自动转换

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
b=3+4; 没有强制类型转化却没有报错,是不是右边的计算结果可以容纳在byte中不会出现位丢失的情况呢,所以不用类型转换呢?如果右边的值在-128---127之外就会出现强制类型转换,出现位丢失。本菜这么看的,当然为了更好理解,b=(byte)3+4;也可以啊。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
这个是由JVM决定的吧,会自动转换然后超过会丢位
回复 使用道具 举报
最初的理想 发表于 2012-2-20 19:19
b=3+4; 没有强制类型转化却没有报错,是不是右边的计算结果可以容纳在byte中不会出现位丢失的情况呢,所以 ...

3+4=7byte在-128--127内可以容纳,那么byte b=3; b=b+3;
b+3算 出来的结果也为int呀,但没有强制性转换也是错的呀却是错误的。
回复 使用道具 举报
许涛 发表于 2012-2-20 18:27
先前会错题意了

那为何,byte b=3;
b=b+4;右边算出来也是7为int类型呀!它却不自动转换呢!要加个byte强行转换。。。
回复 使用道具 举报
楼主,虽然你定义了byte b = 3;
但是在b = 3+4;这里的3不是你定义的b,它就是一个数字3,,这个语句就是把3+4的值赋给了b,,,,
整个过程中,b并没有参与运算,所以不存在类型提提升
如果是b = b+4,就是将b+4的值重新赋给了b,,这里b参与了运算,4是int型的,所以b被提升了,
在将b+4赋给b的时候必须强制转换一下......

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
许涛 黑马帝 2012-2-20 23:00:51
8#
花开~的季节 发表于 2012-2-20 22:08
那为何,byte b=3;
b=b+4;右边算出来也是7为int类型呀!它却不自动转换呢!要加个byte强行转换。。。 ...

因为b=b+4;是两次运算,是先右边加法预算,再将结果赋给左边(先加法后赋值),b+4是int型的值,再赋给byte型的b,容易损失精度
有别于b=3;因为它是一次运算,只要数据在byte范围内,将自动转换
回复 使用道具 举报
房宝彬 黑马帝 2012-2-21 00:01:43
9#
看来这题我也能拿分,以上都没说出关键

byte = 3+7  与  int a=3; int b=7;  byte=a+b;
前者可以编译通过是因为右边的是常量,不是变量,所以在编译时,常量的和没有超过byte的范围,所以能通过.
后者是因为右边的是变量,变量的值不确定,所以在编译时虚拟机会考虑这个变量有可能超过byte的范围,所以编译失败.
-------------------------------------------------------------------------------------------------------------------------------------------------
了解变量与常量的关系就OK了,这是笔试题中的一道.希望能帮助到你/

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
学习了,好问题
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马