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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘旭升 高级黑马   /  2013-12-23 16:37  /  1872 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在将一个不确定大小的数赋值给int型变量会是正确,但是int型改为btye或者是short就会出错:丢失精度。如下代码:
  1. class ni{  
  2. public static void main(String args[]){  
  3.     byte a =3;  
  4.     byte b=9;  
  5.     byte c=a+b;  
  6.     System.out.println(c);  
  7.     }  
  8. }
复制代码
运行结果:


然后分别做了几个测试发现:当将不确定数值x型赋给变量时,jvm不会报错即使越界(x为int或long)。但是为short或者byte就不会报错。
file:///c:/users/ADMINI~1/appdata/roaming/360se6/USERDA~1/Temp/201312~1.JPG

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
FFF 金牌黑马 2013-12-26 09:00:56
沙发
没明白你想问什么问题~是分享吗?
回复 使用道具 举报
FFF 发表于 2013-12-26 09:00
没明白你想问什么问题~是分享吗?

算是的,就是看看java默认的整数的类型是什么。
回复 使用道具 举报
byte c=a+b;  涉及到类型转换,定义byte a=3,byte b = 9,在进行a+b操作时,byte类型的a、b会自动提升为int类型进行运算,a+b运算后的结果类型也会是int类型,当把int类的变量赋给byte类型时,由于byte类型的范围比int小,无法将int类型自动转换为byte类型,就会报告丢失精度,在编译的时候就会报错,要使程序正常运行,可以使用 byte c = (byte)a+b或者int c = a+b;
对于java的八种基本数据类型,除了boolean类型外,各个类型的范围大小:
byte,char short  < int <long<float<double
其中byte、char、short类型在进行运算时,会默认自动转换为int类型,再进行运算。

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
tuanjie 发表于 2013-12-28 12:25
byte c=a+b;  涉及到类型转换,定义byte a=3,byte b = 9,在进行a+b操作时,byte类型的a、b会自动提升为i ...

原来会都转为int~谢谢
不过 那个是不是 byte c= (byte) a + (byte) b ,而不是 byte c = (byte)a+b ??
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马