知天下,分类信息

byte b = 10;为什么b=b+5;编译报错?

byte b = 10;为什么b=b+5;编译报错?

java 中定义byte b = 10;byte c = 5;b = b + c;为什么会出现编译错误呢?

这个问题所涉及到的问题是“自动类型提升”:

在java中,对char, byte和short类型的字符串进行数学算法操作,比如+,-,>>位移等操作,都会引发自动类型提升,运算结果将是int类型,要将int的值赋给byte就会出现编译错误,所以就必须进行类型强制转换。语句如下:

byte b = 10;byte c = 5;b = (byte) (b + c);关于类型的自动提升,java定义若干适用于表达式的类型提升规则:  

第一,所有的byte型、short型和char型的值将被提升到int型;  

第二,如果一个操作数是long型,计算结果就是long型;  

第三,如果一个操作数是float型,计算结果就是float型;  

第四,如果一个操作数是double型,计算结果就是double型。

java中byte b=10;byte b1=~b;编译错误原因。byte b 2=~10;是正

java中byte在内存中实际上是用int运算的。b取反后,会自动变成int类型。加法、减法,都一样,byte会自动变成int类型。所以会报错。

而~10可以,这是java字面量编译原则,会先将~10计算出来。在赋值给byte,所以不会有问题。

Java中,为什么byte b+=1是合法的,而byte b=b+1不能通过编译

byte b+=1 的时候你定义了b(其实是在使用之前已经做了强制转换)是一个byte型变量,可以正常运算

而byte b=b+1 当运算b+1的时候,发现b没有被定义,所以不行啊,呵呵

供参考

JAVA为什么byte b=a+1会报错

byte a= 1;∥=号后面是个常量时,=号会自动类型转换,int类型1,转换成byte类型。

float a =1.0F;∥=号后面是个常量时,=号会自动转换类型,double类型1.0,转换成float类型。

char x = 'a';∥+号后面是个常量时,=号会自动转换类型,int类型97,转换成char类型。

——————————————————————————————

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,常量+常量得常量,常量在+=(=)后面,自动转换类型,不报错。

——————————————————————————————————

int a = 1;

int b = a+1;∥int类型a加int类型1,结果为int类型的值(a+1),int变量的值,肯定可以放入int变量里,所以int b= a+ 1不报错。

标签: