java问题byte a=1,b=1;byte c=a+b;为什么错

为什么会自动转化为int

你所问的这个问题叫“自动类型提升”

在java中,对char, byte和short类型的字符串进行数学算法操作,比如+,-,>>位移操作,都会引发
自动类型提升,结果将是int类型,a+b的结果是int, 要将int的值赋给byte就必须进行类型强制转换。

以下这句,是从think in java 3rd中摘出来的,希望对你有帮助。
In char, byte, and short, you can see the effect of promotion with the arithmetic operators. Each arithmetic operation on any of those types produces an int result, which must be explicitly cast back to the original type (a narrowing conversion that might lose information) to assign back to that type.

最后 关于类型的自动提升,java定义若干适用于表达式的类型提升规则:

第一,所有的byte型、short型和char型的值将被提升到int型;
第二,如果一个操作数是long型,计算结果就是long型;
第三,如果一个操作数是float型,计算结果就是float型;
第四,如果一个操作数是double型,计算结果就是double型。
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-08-02
a+b产生的结果会自动转为int类型

所以需要进行一次强制类型转换

byte c=(byte)(a+b);
第2个回答  2008-08-02
别人说的很明白了,我就不说了。

java问题byte a=1,b=1;byte c=a+b;为什么错
在java中,对char, byte和short类型的字符串进行数学算法操作,比如+,-,>>位移操作,都会引发 自动类型提升,结果将是int类型,a+b的结果是int, 要将int的值赋给byte就必须进行类型强制转换。以下这句,是从think in java 3rd中摘出来的,希望对你有帮助。In char, byte, and short, you can ...

JAVA为什么byte b=a+1会报错
byte a = 1;byte b = a+1;∥+会自动提升类型,a被提升为int,a+1是个表达式,是不确定的,所以=不会自动转换类型,需要,改为byte b = (byte)(a+1)———byte a = 1;a +=2;∥+把a被提升为int类型,2取自常量池int,1+2得3,常量+常量得常量,常量在+=(=)后面,...

关于java中byte a=1;的问题
可以这么说byte是int的子集,byte表示范围是-128-127;在这个范围内可以用整形常量(注意一定是整形常量不是整形变量)复制给byte类型的,这样做的目的就是为了节约更多的资源。

字节类型 byte x=1; byte y=2; byte z=x+y; 为什么JAVA显示错误?3应该...
所以x + y是int + int-->结果是int 需要强制转换为byte byte z = (byte) ( x +y);

java 数据类型转换的问题 byte a = 100; int b = 98; byte c = (byte...
byte类型使用1字节存储,表示范围-128~127,int使用4字节存储,当byte+int时会将结果类型转为int,因为int表示范围大于byte,不影响精度,所以结果为197,但是当(byte)(a+b)时,是将计算结果int转为byte,存储空间也有4字节变为1字节,即是保留8个bit,把他们全部转换成2进制=11000110(198刚好8位),此时...

Java基础 byte a=3; byte b=4; byte c=a+b; 第3行为什么非得强制类型...
3 4 这些数字都是int型的 当然需要强制转换类型了 同样道理的还有 1.1 这个就是double 像这样 float a=1.1 这样写也会报错

在Java中,byte类型数据在运算之前要转换成int类型数据。
第四行就开始有问题了:a,b都是byte型,他们相加会先自动转换为int然后相加,当然相加的结果也是int型的,但是你要将一个int型的数字赋给一个byte型的c显然是要强制转换的,因此Java会报编译错误,第五行是同样的道理。第六行有点特殊了,请注意,64+1编译器会自动当做65来处理,这句和c=65效果...

Java创建byte型变量需要在数值的后面加b吗?为什么?
为了跟int做区分。byte在java中是字节表示的。。b表示bit。

在Java中,byte b1=0;byte b2=127;short s1=b1+b2;为什么会报错呢
1,隐性转换一般都是放宽转换(如byte到int,int到long等,都是小的赋给大的。)但是却有一个例外就是,在赋值转换中,隐性转换也包含了缩窄基本转换。就是从int到byte,char,short的转换:比如:byte b=1;\/\/合法 byte b=128; \/\/非法 char和short都是同理的。右边必须为int型字面常量,而且值...

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);就可以了,将结果类型进行强制转换 ...

相似回答