在Java中,byte类型数据在运算之前要转换成int类型数据。

能不能帮我解决一个问题?
在Java中,byte类型数据在运算之前要转换成int类型数据。
比如:
byte a=1;
byte b=2;
byte c;
c=a+b; //这样是计算不出c,是错误的
c=a+1; //这样也是不能计算c的
c=64+1; //为什么这样就能计算c,在Java中这是什么原理啊?

我就是不知道,64+1 Java是怎么编译的,为什么没有变成int型?
谢谢大家,我已经有了更满意的答案。
字面量是对信息、数据的一个表述。或者说是我们直接用来表述的数值或字符。
比如:byte a=64; //其中64就是字面量。
1,2,64等等是整数字面量,它们默认是int型。而1.2,3.4等等是浮点字面量,默认是double型。
不是默认类型字面量,要在其后加上类型标识。
比如:46+7.8f
对于整数字面量,Java编译系统会自动匹配字面量的类型。
当一个int型字面量的值被赋给一个byte 或short型的变量时,如果字面量的值没有超过对应类型的范围时,就不会产生错误。然而,其他类型的字面量(如:short,long,char,double等等)是没有这个功能的。
所以,byte c; c=64+1; //65在byte的范围之内,可以赋值给c。

首先你要明确一点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】这个区间之间的,因此赋值当然不会出错啦。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-03-18
64 + 1会直接编译为65 因为65<128 所以可以直接作为byte类型赋值
第2个回答  2010-03-19
byte类型数据是不能直接相加的,相加会自动类型会转换int型,所以你再赋值给byte 型变量要强制类型转换成byte型如下:
c = (byte)(a+b);
注:自动类型转换:小类型转大类型 如 byte占一个字节,int占4个字节
强制类型转换:大类型转小类型
第3个回答  2010-03-19
楼上基本正确的
我补充一点
在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类型数据在运算之前要转换成int类型数据。
首先你要明确一点byte类型表示一个字节8位,用来表示一些基本字符,int是长度为32位的整形数。当你在Java中给一个byte类型数据初始化时,你可以用字符,也可以用整数,但是这个整数必须要在-128和127之间(因为byte是8位),它会将这个数转化为一个字符然后存放起来,因此你的前两行代码是没有问题的。

java如何将byte类型数组变成int类型的数组?
大端序:int[i] = byte[4*i] << 24 | byte[4*i+1] << 16 | byte[4*i+2] << 8 | byte[4*i+3];小端序:int[i] = byte[4*i] | byte[4*i+1] << 8 | byte[4*i+2] << 16 | byte[4*i+3] << 24;

java如何把byte数组里的十六进制转换成int类型,如下图的数据,杂么转换...
package com.sdvdxl.other;public class Test {public static void main(String[] args) {byte[] bytes = new byte[] {0x00,0x53};for (byte b : bytes) {System.out.println(Integer.valueOf(b));}}}结果:0 83 PS : 使用的时候会自动转换成10进制的 ...

求java编程 字节byte怎么转换成整形int?
Java中的一个byte,其范围是-128~127的,而Integer.toHexString的参数本来是int,如果不进行&0xff,那么当一个byte会转换成int时,对于负数,会做位扩展,举例来说,一个byte的-1(即0xff),会被转换成int的-1(即0xffffffff),那么转化出的结果就不是我们想要的了。而0xff默认是整形,所以,一...

Java中byte整数类型想加为何会自动转化为int整数类型想加
因为int是java默认的整型类型,而且byte的范围很小,很容易溢出,所以会自动转为int。

java 如何将byte[4]数组转换成一个int型数据
java中将4字节的byte数组转成一个int值的工具方法如下:\/ param byte[]return int \/ public static int byteArrayToInt(byte[] b){ byte[] a = new byte[4];int i = a.length - 1,j = b.length - 1;for (; i >= 0 ; i--,j--) {\/\/从b的尾部(即int值的低位)开始copy数...

java如何将byte[4]数组转换成一个int型数据?
connect(pos);\\x0d\\x0aDataInputStream dis = new DataInputStream(pis);\\x0d\\x0aDataOutputStream dos = new DataOutputStream(pos);\\x0d\\x0a\/\/先写4个字节\\x0d\\x0ados.write(bs,0,bs.length);\\x0d\\x0a\/\/读取整型\\x0d\\x0ar = dis.readInt();...

如何把一个byte数组的数字转换成int
这里简单记录下两种转换方式:第一种:1、int与byte[]之间的转换(类似的byte short,long型)[java] view plain copy \/** * 将int数值转换为占四个字节的byte数组,本方法适用于(低位在前,高位在后)的顺序。 和bytesToInt()配套使用 * @param value * 要转换的int值 * @re...

博图如何把byte转换成int
在Java中,byte是8位有符号的整数类型,而int是32位有符号的整数类型。当我们将byte类型的值转换成int类型时,由于int类型的范围比byte类型更大,所以可以正常进行转换。转换的过程中,byte类型的值会被扩展为32位,并保持其符号位不变。拓展内容:除了使用数据类型转换操作外,还可以使用Java中的包装类...

求助~java基础问题byte型
在计算的时候byte 和short 都会被转换成int 所以结果也是int 这个时候需要强制转型 z = (byet)(x + y);

相似回答