java数组越界问题。int与byte转化问题。

/*其中bytes[i] = (byte)i;这一句为什么不越界呢,int超过127的时候,第一个bytes[i]应该越界啊.*/
public class StringCheese
{
public static void main(String[] args)
{
byte bytes[] = new byte[256];
for(int i = 0; i < 256; i++)
bytes[i] = (byte)i; //为什么
for(int i = 0; i < 256; i++)
System.out.print(bytes[i] + " ");
}
}

int 相比与 byte多出来的部分会被截断
比如 对于:
byte b = (byte)1024;
1024的二进制表示是:100 0000 0000 byte只能表示8位,从右往左截断,所以结果是 0000 0000,也就是 十进制的 0
byte b = (byte)257;
257的二进制是:1 0000 0001 从右往左截断,结果是 0000 0001,也就是十进制的 1。
当然如果是
byte b = (byte)100; 则不截断,因为没越界。
这就是大范围数据转成小范围的转法。 明白?追问

再请教一个问题。bytes[i] = (byte)i;这条语句里的第一个 i 是int型吗?

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-07-11
这位小童鞋,byte类型的数据,可以表示从-128到127或者另外一种表示方法,可以表示0到255之间的数据。你采用的byte默认的表示方法从-128到127,当超过127之后就用另一半来表示。
你的问题:
bytes[i] = (byte)i; //为什么

什么意思?我没看明白。估计你不太了解byte类型的数据追问

我的问题在第一行。我的意思是 i 会大于127,所以 bytes[i] = (byte)i; 这句里的第一个 i 就有可能为负,i 为负应该会抛出异常啊!那么为什么编译器不报错呢?

第2个回答  2012-07-11
byte数据,只能表示-128到127之间的数据. int超过127的时候,将产生数据溢出.
i =0; bytes[0]
i =1; bytes[1]
***
i =127; bytes[127]
i =128; bytes[-128]
i =129; bytes[-127]
***
i =254; bytes[-2]
i =255; bytes[-1]

bytes[] 定义为能刚好存储256个数据(即 [-128,-127,-126 --- --- 125,126,127] )
bytes[]不会越界。

java数组越界问题。int与byte转化问题。
int 相比与 byte多出来的部分会被截断 比如 对于:byte b = (byte)1024;1024的二进制表示是:100 0000 0000 byte只能表示8位,从右往左截断,所以结果是 0000 0000,也就是 十进制的 0 byte b = (byte)257;257的二进制是:1 0000 0001 从右往左截断,结果是 0000 0001,也就是十进制...

编写java程序,如何将所有整型数值全部转换成int型,并将转换后的值输出...
假设 byte a short a long a int i = (int)a printf(i);强制类型转换,要注意的是越界问题,如果放在数组里面就用一个循环来赋值就可以了~

java网络编程的问题,不知道哪里出现问题。一个客户端向服务端上传图片的...
错就错在你定义了个byte数组,导致最后一个不到1024byte,也去读那么多!

在java中,将一个String类型的值转换为byte类型,只能占2个字节存储。
Byte.parseByte(s, 16)将s转换成有符号数 ,这一个字节能表示的范围是:-128~127,下面的代码是在搜来的代码基础上稍做了修改,调用的时候你只要把temperature传进去即可得到转换后的byte数组,byte数组的长度由temperature的值决定,你要求只能占2个字节存储的话temperature的长度就要确保不超过4,这由...

在Java中的io流中,read读取文件时,读取完了没有了返回-1,(为什么不...
返回-1是对的啊,read字节数组的时候,读到最后一个没有的时候就数组越界异常,-1就是不在数组的索引值范围内,所以开发人员就将它作为read完成后的返回值

java编程,这是什么意思? new char[] { '0', '1', '2', '3', '_百度...
这句话实际上是两种合在一起了,和下面两句意思一样:char[] array = new char[]{ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E' };array[15] = 70;就是让字符数组的下标为15的元素的ASCII码为70。但是下标15实际上越界了...

什么是数组下标越界?
UBound 和 LBound 函数来决定数组访问。如果索引指定为变量,应检查变量名的拼写。以一个简单的一维数组为例:int a[10];这是一个整型的数组a,有10个元素:a[0]-a[9],因为正确的下标应该是从0开始,到9结束,与生活习惯中的1-10不一样,于是产生一个a[10]的错误,即数组下标越界。

VB 中下标越界问题
你dim min() as byte 并没有初始话该数组变量 没给它redim 也没有赋值 怎么可能引用它呢?当然出错

vb 数组下标越界问题
For w= 1 To 12 StrRec = MSComm1.Input ReceiveArr(w+1) = StrRec(0) '提示数组下标越界 Next

byte数组大小问题
byte[] buffer = new byte[4];ms.Read(buffer, 0, (Int32)ms.Length);\/\/ buffer = Encoding.Unicode.GetBytes(msg);string result = Encoding.Unicode.GetString(buffer);Console.WriteLine(result);Console.ReadLine();这个代码就会报错,说数组超过大小。但是你的那个代码为什么没报错呢?因为数组是...

相似回答