java中 byte b = 2; b = 3+7;执行正确 但是 byte b = 2; byte b1 = 3; byte b2 = 7; b = b1+b2;执行错误

如题所述

b = b1+b2;错误是因为byte与byte数据相加,数据自动转换为int型,所以byte b= b1+b2肯定不对了啊。需要类型强制转换,byte b=(byte)(b1+b2)追问

你的意思应该是int型赋给byte会损失精度报错,对吗?
但,
byte b=2;
b=3+7;
3、7也是int型,相加后仍是int型,编译时未报错

追答

int型赋给byte会损失精度报错,这句话是对的。但后面的3、7也是int型就不对了,因为byte的取值范围是-128~127 ,那么这个3,7判定是什么类型,就不确定了,比如byte b =3;int b=3;long b=3L,这都可以正常编译,原因是它会根据这个数值所在范围,3明显在 -128~127 这个范围内,这个判定依据是前面的符号。如果byte b=3,它就会占2个字节。而int b=3,它就会占4个字节。long b=3L,它就占8个字节。

追问

java中,
整数默认情况下是 int型 ,小数默认情况下是double型,例:
float i=3.13;//3.13就是double型 必须后加f ,即 float i=3.13f;否则报错

追答

你说的是对的,但是你需要知道java里的数据类型还不够。你学过c把,我把它们之间的区别说一下,尽量说详细些,以后你碰到这种问题就不会有这种疑问了。

Java中表达式中char、byte、short类型计算时会自动先转换成int型,即两个byte型相加生成的是int型变量。有以下定义byte b1 = 1,b2 = 2,b3;要将b3赋值成b1和b2的和,必须写成b3 = (byte)(b1 + b2);因为b1+b2是int型的,不强制转换类型编译器会报错。
而C中则不会将char、byte、short类型自动转换成int型。
Java中常数(即字面值)中,整数是默认int型的,小数是默认double型的。char、byte、short变量可以直接赋值成整数,不改变类型,而long变量赋值时要加上后缀l,float变量赋值小数时要加上后缀f(float赋值不加后缀会报错)。例如long t1 = 20l;float f1 = 2.3f;
C++中的类型转换则不是很严格;

追问

谢谢,你说的我明白了
byte b=2;
b=3+7;执行正确是因为:
虽然3+7的和是int,但10是常量且在-128~127间,因而赋值给byte不会造成数据的遗失

byte b=2; byte b1=3,b2=7;
b=b1+b2;编译报错是因为:
b1、b2是变量,在某些情况下如 b1=127;b2=127;和是int型,但和254不在-128~127间,因而
赋值给byte会造成数据的丢失,是这样理解的吗?

追答

差不多就是这样理解的。因为一个变量你不能确定它的值是多少。在这里虽然byte b1=3,b2=7;但我可以在后面让b1=127;b2=127,那么b=b1+b2;不是就超出byte范围了吗。所以java里2个byte相加自动转换为int型就是这个考虑。而int型转为byte需要强制转换。

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-09-15
貌似两个byte型变量相加,结果会隐式转换成int型,JAVA程序员面试宝典里有这题目的
第2个回答  2012-09-15
应为byte不能加减!
第3个回答  2012-09-15
byte b=(byte)(b1+b2)

java中 byte b = 2; b = 3+7;执行正确 但是 byte b = 2; byte b1 =...
b = b1+b2;错误是因为byte与byte数据相加,数据自动转换为int型,所以byte b= b1+b2肯定不对了啊。需要类型强制转换,byte b=(byte)(b1+b2)

请问Java:为什么byte b1 = 3; byte b2 = 4; byte b = b1+b2;会报错?
byte b = b1+b2;以为b1+b2java中是自动转换成int型在计算值的 结果是int型的数据,不能自动转成byte,所以报错,byte b =(byte)(b1+b2);就不报错了

java中数据类型 byte b1 =1; byte b2 =2; byte b3 =b1+b2; 结果怎么...
类型转换错了,虽然b1,b2定义为了byte类型,但是b3运算的时候,b1+b2调用的是1+2,运算结果的类型为整数型数据的默认类型,为int ,而定义的b3为byte,出现了两种数据类型不一。精度高的转精度低的,会发生丢失精度,改成byte b3 =byte(b1+b2);就可以了,将结果类型进行强制转换 ...

在Java中,byte b1=0;byte b2=127;short s1=b1+b2;为什么会报错呢
byte b=1;\/\/合法 byte b=128; \/\/非法 char和short都是同理的。右边必须为int型字面常量,而且值必须能被左边类型表示 2,单纯是都是整型数据参与的运算都要转换为int类型,除非非有long类型参与运算则转换为long,或者有浮点类型参与运算的话都转成浮点类型。单纯的浮点类型float类型参与运算不用转...

java 中关于byte数组的赋初值问题
byte short int long 这几种类型都是java中的整数类型 你肯定对int比较了解,byte和int的区别是int是32位,byte是8位,表示的数字范围为:-128到+127 所以 第一个byte中元素都没超过范围,都以数字显示。第二个byte数组中的元素都是char类型,char类型是占16位的,一般转换为byte是由大到小,需要...

java中byte b=10;byte b1=~b;编译错误原因。byte b 2=~10;是正
java中byte在内存中实际上是用int运算的。b取反后,会自动变成int类型。加法、减法,都一样,byte会自动变成int类型。所以会报错。而~10可以,这是java字面量编译原则,会先将~10计算出来。在赋值给byte,所以不会有问题。

byte b1 = 10; byte b2 = 20; byte b3 = b1 + b2; System.out.println...
。。。java的话b1+b2会自动转int,必须强转为byte才行 另一个问题,那个数是不是超过int的范围了?

[java] byte b; b = 3 + 4; 为什么这样会是对的呢?
byte + byte 会默认类型转换成: int + int 。然后得到的结果当然是int类型了。 应为java默认运行最大效率的数字类型是int ,其他类型的运算好像都没这个快,所以默认被转换成了int。3 + 4 先会被计算成 7 ,再转换成对应的 byte类型。此处也是效率问题,3、4先转换成byte的效率低于...

java中long=后面为什么还要加个L:: byte b=3 b=b+3 怎么还能报错
所以b=b+3,b+=3,都是b变量加3,前者会报错,后者不报错。也就是你用了+-*/本来会强制的变成了不强制的。写2个例子 byte a=1;byte b=1;byte c=a+b;∥报错,运用了+,计算前需要把a和b取出来,取出来变成了int类型,再加,运用+,完了变成不强制了,就报错了!float a=3.0...

请问java中 byte b= ??
字节类型数据 1 byte=8 bit 1个bit代表1位 8位代表2*2*2*2*2*2*2*2=256 所以byte类型数据代表0~255这些整数或者对应的AscII码字符

相似回答