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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 开弓没有回头箭 中级黑马   /  2015-6-8 08:37  /  1334 人查看  /  25 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

byte a1=1,a2=2,b;
b=a1+a2;
这个会报“可能损失精度”错误,意思是a1+a1是int型,但是a1和a2都是byte型啊,为什么会转成int型,这是什么原理啊

25 个回复

正序浏览
温故而知新 谢谢分享
回复 使用道具 举报
楼上说的很好了
回复 使用道具 举报
会将数据类型提高到int类型,计算的结果是int类型,相当于将int类型赋给short型,因此会报错
回复 使用道具 举报
li520 来自手机 中级黑马 2015-6-9 21:50:14
23#
你很不错
回复 使用道具 举报
赞一下。。。。。
回复 使用道具 举报
当a1和a2进行运算时,系统会把a1和a2运算后的结果的类型自动提升为int类型,再把int类型的结果复制给byte类型,那肯定会损失精度,当结果的值超过128时,就会报错了,而不只是损失精度这么简单了。
回复 使用道具 举报
java的运算,系统默认为Int类型
回复 使用道具 举报
byte太小了。 一般用int  会强制转换。、
回复 使用道具 举报
这种损失精度的问题看了好多了还是比较模糊。
回复 使用道具 举报
2个低于int类型的两个数相加运算时会提升为int,运算的结果还是int.  无法赋值给(byte类型)所以会出错。这是我看视频时候记的笔记。你可以看一下,如果不是很明白看入学视频第二天里边的视频有这个内容。
回复 使用道具 举报
过来 学习下
回复 使用道具 举报
原因是这个 + 的问题 , 变量a1 ,a2在编译时期是不知道值是多少的,二值相加的就会可能造成溢出,所以编辑器会询问用户的意见,是否进行变量类型的提升,还是让其溢出。。。。所以有两种方法可以运行:
1. b = (byte)(a1+a2) ;
2. int b = a1 + a2 ;
回复 使用道具 举报
数值大的话超过byte型 就会损失精度
回复 使用道具 举报
学习一下。。
回复 使用道具 举报
谢谢大家,又学了一点
回复 使用道具 举报
低于int类型的两个数用+运算做运算都会默认自动提升为int型的
回复 使用道具 举报
八戒 发表于 2015-6-8 10:00
这样给你说吧,凡是低于int类型的两个数用+运算做运算都会默认自动提升为int型的,记住就好 ...

还有这个规格啊,必须记下来。。。谢谢。。。
回复 使用道具 举报
刚开始你已经把b定义为byte类型,而byte类型的值在运算时会自动转成int类型的值来进行运算,所以后面应该加上强行转换,如果你给a1和a2赋值时让它们的和大于127(byte能存储的最大值)时,就会报错
回复 使用道具 举报
感觉是因为里面有一个默认的类型转换(就像楼上所说的),这个是要记住的。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马