字节数组的实际长度是多少?例如:
int x = 123 equals to byte[] b = 0111 1011
现在,如果我想弄清楚所述整数的长度,我会使用b.length
,但从我收集的内容来看,长度只能是8的倍数,因为每个字节代表一个强制数。这是字节数组的情况还是我错过了什么?
答案 0 :(得分:5)
从我收集的内容来看,长度只能是8的倍数
我认为你在位和字节之间有点混淆。一个字节是8位。字节数组的.length
是以字节为单位的长度,它总是一个整数字节,是8位的倍数。
内存中的int总是4个字节,即32位。您的示例int 123具有以下位表示:
0000 0000 0000 0000 0000 0000 0111 1011
字节数组可以是任意长度的字节数,因此b.length
是您创建它的任何大小。它不需要很长的整数,但如果你想在int和字节数组之间进行转换,那么如果你总是存储整个int就更简单了。这意味着,使这些字节数组长度为4个字节的倍数。
如果您只想知道以二进制编写的数字的长度,最简单的方法是将其转换为字符串并测量其长度。方法Integer.numberOfLeadingZeros
也可能对您有用。
int x = 123;
System.out.println(Integer.toBinaryString(x)); // 1111011
System.out.println(Integer.toBinaryString(x).length()); // 7
System.out.println(x == 0 ? 1 : (32 - Integer.numberOfLeadingZeros(x))); // 7
答案 1 :(得分:1)
您可以拥有不代表整数值字节的byte
数组。
因此,它们的长度(通过获取数组的length
公共字段来推断)完全是任意的。