java 字节转换成int的问题

来源:百度知道 编辑:UC知道 时间:2024/06/15 13:37:16
package testSWQ;
import java.io.*;
public class TypeCoversionNotsameEvaluate {

/**类型转换与赋值不同
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
new TypeCoversionNotsameEvaluate().bookmethod();
new TypeCoversionNotsameEvaluate().myselfTest();
}
public void bookmethod()
{

byte[] buf = new byte[]{2,12,6,-1,-9,9};
/*-1在byte中的二进制是 11111111(最高位1表示负0表示正 -1十进制=1000 0001取反加1 为
* 取反最高位不变 1111 1110+1=1111 1111 将它转换成int类型在前面加0即为
* 0000 0000 0000 0000 0000 0000 1111 1111 即是int类型的255*/
ByteArrayInputStream in = new ByteArrayInputStream(buf,3,1);
int data =in.read();
while(data!=-1)
{
System.out.println(data+" ");
data = in.read();
}
try {
in.close();
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
public void myselfTest()

很简单……例子读入的是字节流,
没有存储具体类型或者长度的概念,
编译器并不知道当时的输入最后一位是符号位,
甚至不知道11111111代表的是什么,
所以转换只会按它认为最可能的一种进行转换,
而byte型是有具体类型和存储长度的,
既然JAVA里没有无符号类型,
你这样的赋值JAVA就会自动保证结果不会出现变化,
不然你想每每低位数向高位数赋值都会在高位数中得到不同的结果,
那也太恐怖了……