在Java中,两个byte类型数据相加为什么会报错呢?

byteb=4;byteb1=3;byteb2=7;b=b1+b2;//这样是计算不出b,是错误的b=b1+7;//这样也是计算不出bbyteb=3+7;//怎么这样又可... byte b=4;
byte b1=3;
byte b2=7;
b=b1+b2; //这样是计算不出b,是错误的
b=b1+7; //这样也是计算不出b
byte b=3+7; //怎么这样又可以计算?

求解啊。。
非常感谢大家的回答,以下有了详细的介绍,希望有跟我一样不理解的也能看到:

//b = 3+7;
/*
b取值范围:-128~127
编译器在编译时(byte类型取值是有限的)他在判断右边的数值的时候发现是int类型(是“常量”), 但他会判断是不是在byte字节范围之内,如果在的话,会给右边的int类型做默认的强转,他把最后的一个字节(byte八个二进制)赋值到了b这个变量当中
*/

/*
b1和b2是“变量”意味着这两值不确定、可能随时变化,编译器无法检查,也无法确定是否在byte字节范围之内, 他检查不了就会报错(可能丢失精度),如果是“常量”编译器就能够判断了

int x;
int x1=Integer.MAX_VALUE;
int x2=2;
x=x1+x2;
默认int运算,一旦超出这个范围,他自动底层有强制转换过程,保留自己原有位置、高位全舍弃 这就是byte和int的区别,int属于默认类型,他就没有byte上面那样的问题
*/

//byte和short类型“变量”,相加不能确定结果,无法检查,也不是默认类型,所以byte、short类型相加的时候,都会自动提升到int类型的
展开
 我来答
mxh快乐
推荐于2017-09-27 · TA获得超过366个赞
知道小有建树答主
回答量:199
采纳率:0%
帮助的人:107万
展开全部
byte 表示一个字节,他的表示范围[-128 127],
byte b=4;
byte b1=3;
byte b2=7; 都在这个范围之内,没有问题。
这里还有一个问题 就是我们写的整数,没有明确指出类型(比如说 byte b = 4;中的4) 系统默认是int的,
那么为什么不会编译出错呢,这里( 我认为 )这个整数如果没有超出范围(比如 byte b = 4;在范围之内),编译系统有个自动转换。
那么b= b1 + b2;怎么又会编译出错呢,而且 b1,b2都是byte型的,这里java又有自己的一个机制,就是防止两个小数相加超出自己所表示的范围,把b1 ,b2变成 int 在相加。相加后也是int 型(注意这里的int 和 上面说的没有指出类型的整数默认是int 有区别,这里相当于你自己实际定义的了 例 int c=0; 系统不会在将这种明确规定数据类型的数做出自动转换的。转换也要自己强制类型转换b=byte(b1+b2); 这样看来好像更符合防止两个数相加超出自己表示范围的机制)。
b=b1+7;和b= b1 + b2;情况差不多。
byte b=3+7;这个就好理解了,编译器是把 3+7 看作一个整体的 就是10 了,10
百度网友9308069
2012-09-06 · TA获得超过1万个赞
知道大有可为答主
回答量:3947
采纳率:89%
帮助的人:1897万
展开全部
Java代码编译字节码后,byte short char boolean等基础类型都转换成int进行计算
b=b1+b2; //b1+b2得到了一个int的值所以需要强制转换
b=(byte)b1+b2;
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
海边捡宝滴水穿
推荐于2017-09-27 · TA获得超过1.7万个赞
知道大有可为答主
回答量:5431
采纳率:0%
帮助的人:694万
展开全部
public class Bank {

public static void main(String[] args) {
byte a=1;
a=a*2;
System.out.println(a);
在java中,类型为byte,short,char类型的变量在运算的时候会自动转为int类型,在式byte a=1;中变量a为byte类型,但在式a=a*2;中a*2为int类型,而a还是byte类型,所以会报精度损失,将a=a*2;这个式子改为a=(byte)a*2;即可!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wushibuwei
2012-09-06 · 超过13用户采纳过TA的回答
知道答主
回答量:55
采纳率:0%
帮助的人:40万
展开全部
两个byte类型相加会先自动转换为int然后相加,当然相加的结果也是int型的,但是你要将一个int型的数字赋给一个byte型的显然是要强制转换的,因此Java会报编译错误,
你这样就可以 b=(byte)b1+b2; 当然第五行一样这个道理;
第六行是:因为java会自动将字面量值转换为对应的(byte,short,long,char,double等)匹配类型,只要不超过对应的存储范围就不会出错
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式