美文网首页数据程序员
浅谈java中byte short基本数据类型

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

作者: itcode | 来源:发表于2017-07-13 13:01 被阅读13次

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

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

    运行结果是错误的

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

    相关文章

      网友评论

        本文标题:浅谈java中byte short基本数据类型

        本文链接:https://www.haomeiwen.com/subject/xcqihxtx.html