黑马程序员技术交流社区

标题: 类型提升的问题! [打印本页]

作者: 七弦    时间: 2014-5-31 12:54
标题: 类型提升的问题!
byte a = 1;
byte b = 2;
byte c = a + b;

为什么byte类型的数相加不能赋值给byte类型呢?
作者: Blüe-wǒlf    时间: 2014-5-31 13:01
默认的数字相加是算整型数据int,这里运算相加就把1,2,提升为int。int数据类型相加的结果赋值给byte怎么可以呢?是吧
作者: fenzheng    时间: 2014-5-31 13:01
你把他改成int 类型就可以了         byte a = 1;
                byte b = 2;
                int c = a + b;
试试,这样就不报错了
作者: fenzheng    时间: 2014-5-31 13:03
byte类型不常用, 默认的是int类型,给你提升成了int了,,然后你有byte类型的去接受当然报错了,你需要告诉java虚拟机,你这种类型不是默认的int类型,而是byte类型的,你要,我看看,怎么表示的,稍等
作者: Lex    时间: 2014-5-31 13:03
因为byte c = a + b;在进行编译的时候是会把byte a和b默认向上转型成Int型,得出结果也是int型,而你等式左边是byte型变量,向下转型就会发生类型转换错误啦,说以你得这么写byte c =(byte)(a + b);,怎么样说的很详细了吧:D
作者: fenzheng    时间: 2014-5-31 13:06
你可以这样子做,你可以强转的        byte a = 1;
                byte b = 2;
                byte c = (byte) (a + b); 这样也不会报错的
作者: yang1352546    时间: 2014-5-31 13:32
对于  char    byte    short  类型在计算时会自动的进行类型提升,转换为了int型。
如果要编译成功  有两种办法1是 byte c = (byte) (a + b).这是讲右边进行了强制转换。
  2就是int c = a + b
作者: EDDY_Liang    时间: 2014-5-31 13:58
如果用byte c = (byte) (a + b)
这种方法的话。。也就是强制转换,
可能会导致数据失真的,
因为int类型是4个8位,
byte是2个8位,
如果强转的时候前面两个8位不为0 ,那数据就失去精度了
作者: Blackay    时间: 2014-5-31 14:18
计算机为了免于出现损失精度的情况 在处理相加的操作时  会自动将整形数字转化成int类型 但是你用byte类型去指向显然就出现了高精度向低精度转换的错误,所以会报错,此时就需要使用强制转换将int类型转换为byte类型
作者: 黑马粉、峥    时间: 2014-5-31 22:53
系统默认整数类型的是int,所以这里a,b的类型时int,所以系统会报错,如果你想要输入正确的话可以用强转的方式来改,格式如下:        (byte)(a+b)




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2