日期:2014-05-20  浏览次数:20682 次

初学JAVA,请问这段程序为什么会提示损失精度?
本帖最后由 Myjava_peng 于 2013-01-11 18:54:40 编辑

class Da
{
public static void main(String[] args) 
{
byte b = 3;
byte b1 = 3;
byte b2 = 7;
b = b1 + b2;
System.out.println(b);
}
}


教程里好像是说因为b1、b2是变量,计算机无法确定他们的值,也就不能确定进行运算,因为不知道b1+b2是否会超出byte的范围。
可那个b1 b2不是有赋值给他们了吗?3 和 7,为什么会说没办法确定b1 b2的值
如果把程序这样的话怎么就不会损失精度了?

class Da
{
public static void main(String[] args) 
{
int b = 3;
int b1 = 3;
int b2 = 7;
b = b1 + b2;
System.out.println(b);
}
}

int类型也范围,难道这样就不怕b超出int的范围,损失精度吗?

------解决方案--------------------
引用:
3+7=10,超过了一个字节

不是这个问题,
java里两个整数做运算,比如这里的做加运算
java会默认把他们转成int类型,计算完成后,赋值个byte类型的话
由于是大类型往小类型转,所以必须强制转换,因为java是严格类型检查的语言
------解决方案--------------------
byte类型的做运算,自动上升到int类型的空间做运算,所以运算结果必须是int型的,否则编译器会报错,如果你非要写byte就要强转,不过要注意 byte运算后最好不要超过byte的范围
------解决方案--------------------
引用:
引用:
引用:3+7=10,超过了一个字节
不是这个问题,
java里两个整数做运算,比如这里的做加运算
java会默认把他们转成int类型,计算完成后,赋值个byte类型的话
由于是大类型往小类型转,所以必须强制转换,因为java是严格类型检查的语言

是不是就是说JAVA里所有整数运算都是默认int类型,运算……


嗯。可以这么理解。