java byte相加为什么会成为int?在Java中,两个byte类型数据相加为什么会报错呢
今天给各位分享java byte相加为什么会成为int的知识,其中也会对在Java中,两个byte类型数据相加为什么会报错呢进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
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不报错。
java中byte[]转换成int
java中byte转换为 int有两种情况,一种是要求保持值不变,例如进行数值计算,可采用强制类型转换:int i=(int) aByte;
另一种是要求保持最低字节中各个位不变,3个高字节全部用0填充,例如进行编解码操作,
则需要采用位操作:int i= b& 0xff;
int InputStream.read()
该函数返回一个int类型,范围从0至255,如果到达流末尾,返回-1。通过ByteArrayInputStream的源码可以看到是如何从byte转到int
public synchronized int read(){
return(pos< count)?(buf[pos++]& 0xff):-1;
}
注意,不是自动转的,需要强制做处理。
在Java中,两个byte类型数据相加为什么会报错呢
byte表示一个字节,他的表示范围[-128 127],
byte b=4;
byte b1=3;
byte b2=7;都在这个范围之内,没有问题。
这里还有一个问题就是我们写的整数,没有明确指出类型(比如说 byte b= 4;中的4)系统默认是int的,
那么为什么不会编译出错呢,这里(我认为)这个整数如果没有超出范围(比如 byte b= 4;在范围之内),编译系统有个自动转换。
那么b= b1+ b2;怎么又会编译出错呢,而且 b1,b2都是byte型的,这里java又有自己的一个机制,就是防止两个小数相加超出自己所表示的范围,把b1,b2变成 int在相加。相加后也是int型(注意这里的int和上面说的没有指出类型的整数默认是int有区别,这里相当于你自己实际定义的了例 int c=0;系统不会在将这种明确规定数据类型的数做出自动转换的。转换也要自己强制类型转换b=byte(b1+b2);这样看来好像更符合防止两个数相加超出自己表示范围的机制)。
b=b1+7;和b= b1+ b2;情况差不多。
byte b=3+7;这个就好理解了,编译器是把 3+7看作一个整体的就是10了,10
在Java中,byte类型数据在运算之前要转换成int类型数据。
首先你要明确一点byte类型表示一个字节8位,用来表示一些基本字符,int是长度为32位的整形数。当你在Java中给一个byte类型数据初始化时,你可以用字符,也可以用整数,但是这个整数必须要在-128和127之间(因为byte是8位),它会将这个数转化为一个字符然后存放起来,因此你的前两行代码是没有问题的。第四行就开始有问题了:a,b都是byte型,他们相加会先自动转换为int然后相加,当然相加的结果也是int型的,但是你要将一个int型的数字赋给一个byte型的c显然是要强制转换的,因此Java会报编译错误,第五行是同样的道理。第六行有点特殊了,请注意,64+1编译器会自动当做65来处理,这句和c=65效果是一样的,由于65是在【-128,127】这个区间之间的,因此赋值当然不会出错啦。
文章分享结束,java byte相加为什么会成为int和在Java中,两个byte类型数据相加为什么会报错呢的答案你都知道了吗?欢迎再次光临本站哦!