数据程序员

浅谈java中byte short基本数据类型

2017-07-13  本文已影响13人  itcode

首先,我们来看下这个程序:

不难发现,这个程序在结构上是没有错误的,可是运行结果又是如何呢?

运行结果是错误的

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范围

上一篇下一篇

猜你喜欢

热点阅读