黑马程序员技术交流社区

标题: 精度丢失的类型 [打印本页]

作者: 刘旭升    时间: 2013-12-23 16:37
标题: 精度丢失的类型
在将一个不确定大小的数赋值给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


作者: FFF    时间: 2013-12-26 09:00
没明白你想问什么问题~是分享吗?
作者: 刘旭升    时间: 2013-12-26 12:21
FFF 发表于 2013-12-26 09:00
没明白你想问什么问题~是分享吗?

算是的,就是看看java默认的整数的类型是什么。
作者: tuanjie    时间: 2013-12-28 12:25
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类型,再进行运算。

作者: 罗安迪    时间: 2014-1-24 18:50
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 ??




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2