Java中的“byte”类型
可能重复: 我正在尝试创建一个大小为“1”的字节数组,其中包含字节0x0。在Java中,我可以这样做吗:Java中的“byte”类型,java,arrays,byte,Java,Arrays,Byte,可能重复: 我正在尝试创建一个大小为“1”的字节数组,其中包含字节0x0。在Java中,我可以这样做吗: byte[] space = new byte[1]; space[0] = 0x0; 十六进制值0x0是否会转换为其字节代表00000000,并将其存储在空间[0]中?是,这将完全执行您认为它应该执行的操作。也看到这个 十六进制值0x0是否会转换为其字节代表00000000并存储在空间[0]中 在您的执行程序中,Java字节值0只有一种表示形式,即8位2的整数0-8位的补码表示形式 在
byte[] space = new byte[1];
space[0] = 0x0;
十六进制值0x0是否会转换为其字节代表00000000,并将其存储在空间[0]中?是,这将完全执行您认为它应该执行的操作。也看到这个 十六进制值0x0是否会转换为其字节代表00000000并存储在空间[0]中 在您的执行程序中,Java字节值0只有一种表示形式,即8位2的整数0-8位的补码表示形式 在源代码中将数字文字表示为0十进制、00八进制或0x0没有任何区别。它们的意思完全一样 所以-是的,您的代码实现了您的期望 一个简单的单线版本是:
byte[] space = new byte[] {0};
或
甚至
byte[] space = new byte[1];
最后一个依赖于Java字节数组默认初始化为全零这一事实
十六进制值0x0是否会转换为其字节代表00000000并存储在空间[0]中
是的。技术上,即根据JLS,发生的情况是:
0x0变为整型文字。在这一点上,用于整数文本的特定语法实际上是无关紧要的。。。只要它是有效的。
使用隐式原语缩小到字节值的转换缩小int文本。
字节值用于数组的初始化。
步骤2中的隐式变窄是允许的,因为:
这是在作业上下文中。
指定的值是整数类型的编译时常量表达式。文本是编译时常量表达式。
指定的实际值在要指定的类型范围内。在这种情况下,-128到+127。
用外行的话说,编译器知道在缩小转换过程中永远不会丢失任何信息。Java因为任何编程语言都是关于值的,而不是关于表示的。我确信你的大多数先入之见都是错误的;可能是这里最好的。我想问题是0x0是否是OP认为的…@RomanB-嗯。。。在不知道OP实际认为0x0是什么的情况下,很难回答这个问题:-
byte[] space = new byte[1];