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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 七弦 中级黑马   /  2014-5-31 12:54  /  1233 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

byte a = 1;
byte b = 2;
byte c = a + b;

为什么byte类型的数相加不能赋值给byte类型呢?

9 个回复

倒序浏览
默认的数字相加是算整型数据int,这里运算相加就把1,2,提升为int。int数据类型相加的结果赋值给byte怎么可以呢?是吧

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
你把他改成int 类型就可以了         byte a = 1;
                byte b = 2;
                int c = a + b;
试试,这样就不报错了
回复 使用道具 举报
byte类型不常用, 默认的是int类型,给你提升成了int了,,然后你有byte类型的去接受当然报错了,你需要告诉java虚拟机,你这种类型不是默认的int类型,而是byte类型的,你要,我看看,怎么表示的,稍等
回复 使用道具 举报
因为byte c = a + b;在进行编译的时候是会把byte a和b默认向上转型成Int型,得出结果也是int型,而你等式左边是byte型变量,向下转型就会发生类型转换错误啦,说以你得这么写byte c =(byte)(a + b);,怎么样说的很详细了吧:D
回复 使用道具 举报
你可以这样子做,你可以强转的        byte a = 1;
                byte b = 2;
                byte c = (byte) (a + b); 这样也不会报错的
回复 使用道具 举报
对于  char    byte    short  类型在计算时会自动的进行类型提升,转换为了int型。
如果要编译成功  有两种办法1是 byte c = (byte) (a + b).这是讲右边进行了强制转换。
  2就是int c = a + b
回复 使用道具 举报
如果用byte c = (byte) (a + b)
这种方法的话。。也就是强制转换,
可能会导致数据失真的,
因为int类型是4个8位,
byte是2个8位,
如果强转的时候前面两个8位不为0 ,那数据就失去精度了
回复 使用道具 举报
计算机为了免于出现损失精度的情况 在处理相加的操作时  会自动将整形数字转化成int类型 但是你用byte类型去指向显然就出现了高精度向低精度转换的错误,所以会报错,此时就需要使用强制转换将int类型转换为byte类型
回复 使用道具 举报
系统默认整数类型的是int,所以这里a,b的类型时int,所以系统会报错,如果你想要输入正确的话可以用强转的方式来改,格式如下:        (byte)(a+b)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马