我即将开始研究需要读取字节和创建字符串的内容。正在读取的字节表示UTF-16字符串。所以我只想测试一下,我想将一个UTF-16编码的简单字节数组转换为一个字符串。数组中的前2个字节必须表示字节序,因此必须是0xff 0xfe或0xfe 0xff。所以,我想创建我的字节数组如下:Java将int隐式转换为字节
byte[] bytes = new byte[] {0xff, 0xfe, 0x52, 0x00, 0x6F, 0x00};
但我得到了一个错误,因为0xFF和0xFE的太大而无法放入一个字节(因为字节在Java中签)。更准确地说,错误是int不能被转换为一个字节。我知道我可以通过一个强制转换从int转换为byte并实现所需的结果,但这不是我的问题所在。
只是尝试一些东西,我创建了一个字符串,并调用getBytes(“UTF-16”),然后打印数组中的每个字节。输出有点混乱,因为前两个字节是0xFFFFFFFE 0xFFFFFFFF,后面是0x00 0x52 0x00 0x6F。 (可以想象,这里的排列顺序与我上面试图创建的不同,但并不重要)。
使用这个输出,我决定尝试和创建我的字节数组以同样的方式:
byte[] bytes = new byte[] {0xffffffff, 0xfffffffe, 0x52, 0x00, 0x6F, 0x00};
而且奇怪的是它工作得很好。所以我的问题是,为什么Java允许一个0xFFFFFF80或更大的整数值自动转换为一个字节而没有显式转换,但是任何等于或大于0x80的值都需要显式转换?
谢谢,这使得它更清晰。 – DaveJohnston 2009-12-20 12:41:55