黑马程序员技术交流社区

标题: 求助~有关byte转int的问题! [打印本页]

作者: 张跃峰    时间: 2015-3-24 12:01
标题: 求助~有关byte转int的问题!
byte b=1;b=b+1; 这个编译错误,错误的原因是什么呢,有人说是因为编译器无法确定等号右面的b的值,所以报错,也有人说是因为int转byte会有失精度造成的,到底什么原因呢?还是说有别的解释?{:2_41:}
作者: One_M    时间: 2015-3-24 12:35
试试 b+=1 应该就可以了
byte b+=1,  b+=1运算的时候b已经定义成byte变量(相当于强转了) 而byte b=b+1 运算b+1  时b没有被定义,所以不行。
作者: 小鹏_sJQBO    时间: 2015-3-24 13:28
本帖最后由 小鹏_sJQBO 于 2015-3-24 13:32 编辑

b是byte型,1是int型,系统运算b+1时,会将b自动提升为int型再同1相加,运算完的结果是int型,再将此结果赋给b,而b是byte型,把int型的值赋给byte型,显然是不行的(int型比byte型占位多,会装不下,也就是说会损失精度),所以会报错。毕老师的视频里有讲这个,仔细看看就明白了
作者: 幕丶落    时间: 2015-3-24 17:04
因为1的默认类型是int,byte的二进制是1个八位,int是4个八位,运算b+1时,b会有一个自动提升的过程,变成4个八位,计算结果也是4个八位,然后你再把计算结果赋给byte类型的b,就会丢失精度。
作者: a4230517    时间: 2015-3-24 17:32
b+1会默认把运算结果转换成int型
作者: 零点Crazy    时间: 2015-3-24 17:43
这是关于变量类型转换的问题,在java中有总共有两种转换形式,自动转换和强制转换。
在java中,表数范围小的可以直接赋值给表数范围大的,这就是自动转换。如果将表数大的
赋值给表数小的,则需要强制转换(七种基本类型的表数范围你可以百度)。
b定义的是byte类型,但是在参与运算 "b+1"时,因为b是与int类型运算,b自动转换为int类型与"1"进行运算,所以结果是int类型,而b是byte类型,其表数范围比int小,所以结果会报错,你需要对运算结果进行强制转换,才可以将结果赋值给b即:
b=(byte)b+1;
毕老师基础视频的课件里面java基础1,有这方面的讲解,希望对你有帮助,加油
作者: 勇闯☀☀黑马    时间: 2015-3-24 18:08
byte b=1,  而b=b+1 java会自动类型提升为int,什么是自动类型提升呢,就是占字节少的类型被提升成占字节多的类型,这是默认的,如果你想要byte类型的就必须强制转换  b=(byte)(b+1);

作者: ws748264    时间: 2015-3-24 19:07
强转啊0.0.,结果是int赋给byte强转就可以了
作者: smile2015    时间: 2015-3-24 19:15
等式右边b+1,其中b为byte类型,1为int,相加后变为int 类型,但等式左边是byte,所以类型不同,怎么可以赋值呢
作者: 妖妖    时间: 2015-3-24 19:32
本帖最后由 妖妖 于 2015-3-24 19:39 编辑

现在,我们假设byte类型的是10ml的小杯子,int类型的是40ml的中杯子。byte b中的b是byte类型的。而b=b+1中后面的b+1中的1是int类型的,b说byte类型的,我们是不能将40ml的水倒入到10ml的水杯中的,那样水不就溢出了吗,而10ml杯子中的水是可以倒入到40ml的杯子中的,说以说,到我们进行b=b+1的时候,就有一个类型自动提升的过程,,也就是说会将b自动提升到int类型。反过来也不是说不可以,但是会有精度的损失,而且这种转化时强制的,b=(byte)(b+1)

作者: 四季    时间: 2015-3-24 19:42
byte b=1;//这句话先是说明b是byte类型的
b=b+1;//b是byet类型,而1是一个整数,整数默认是int类型的。而byet和int两种不同的类型,取值范围不同,所以java会提示你错误,如果你一直要执行,可以写成b+=1或者(byte)(b+1);
作者: Mra    时间: 2015-3-24 21:08
java里 计算一般都是以int类型计算的 所以你 b+1 就被提升为int 了  int 的范围比byte大嘛 所以 int的数 转回byte 会有可能丢失精度,  比如  int a =  2222222;  你把他给byte 就会超过访范围啦。
作者: lmcci    时间: 2015-3-24 21:17
整数1默认是int类型。于byte类型相加 提升为int类型与1相加,结果是int类型。赋值给byte类型的变量会出错。
作者: Grady    时间: 2015-3-24 21:20
所有整数默认值是int,b+1类型默认提升为int了。类型不匹配,可以强制转换一下,也可以使用"+=",这个二元运算符-->默认转换成左边的数据类型。
作者: Hksangs    时间: 2015-3-24 21:52
在运算的时候 Byte,short,char会自动转换成int类型的
作者: @G00DMaN    时间: 2015-3-25 00:22
就是int转byte会有精度损失造成的




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