首先,我们来看下这个程序:
不难发现,这个程序在结构上是没有错误的,可是运行结果又是如何呢?
运行结果是错误的byte类型数据是不能直接相加的,相加会自动类型会转换int型,因此这里应该使用强制转换。
修改后的程序 运行结果正确再比如:
byte a=1;
byte b=2;
byte c;
c=a+b; //这样是计算不出c,是错误的
c=a+1; //这样也是不能计算c的
c=64+1; //为什么这样就能计算c,在Java中这是什么原理啊?
首先你要明确一点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中整数默认都上int型,意思就是你写一个1那么1就默认为int型。
浮点数默认为double型,同上
c=a+b; //byte+byte=int
c=a+1; //byte+int(1为int型上面解释了)=int
c=64+1; //其实int+int=(?)就不好说了,这要考虑范围,java编译器帮你把类型转换为你想要的类型,这里就转换为你想要的byte了。
但下面这样就不行了
c=1+127//出错,超出byte范围
网友评论