class Rk
{
public static void main(String[] args)
{
byte a=4;
byte b=3;
byte ab=a+b;
System.out.println(ab);
}
}
为啥会损失精度呢?
解决方案 »
- 关于windows的问题.(JAVA如何关闭一个windows进程,如何修改windows设置)
- 数组 转换...
- 跪求 !~~~~~十万火急!~~~
- JAVA爱好者的喜讯
- 给分了 Exception in thread "main" java.lang.NoClassDefFoundError: Array
- 如何实现对List中元素的update功能?
- 测试:初学者对于JDK的设置和在DOS下怎么使用bin中程序编译运行的一些问题,欢迎回答。也算是个小小的总结。
- 编译通过运行为什么出错?
- cast问题
- 关于多语言得问题
- 如何加强Java 基础?
- 为什么我tomcat运行是总是说 没有内部命令或外部命令···
在a+b的时候,a和b已经都偷偷转换成int型了,所以它们相加得到的和也是int型的。
因为int比byte型占的字节数多,能够表示的精度高,所以当你试图将(a+b)这个int值赋值给byte型的ab时,系统担心会损失精度,因此编译无法通过。除非你这样写:(byte) (a + b)
这样系统认为你已经考虑到了丢失精度的风险,也就是说,你在向系统打保证:“哥心里清楚这样写没问题!”,然后系统就放心了,允许编译通过。
这下明白了吧……