Java:“ [B @ 1ef9157””后面的语法和含义是什么?二进制/地址?

我试图弄清楚[B @前缀在Java中的含义。 它们在我尝试打印字节数组时出来。但是,大小为32和大小为4的字节数组的长度相同。始终为“ [@ B1234567”。

这是什么?同样,它们具有仅打印十六进制值的属性。我知道它不能只是二进制打印,因为会出现随机扩展的ascii字符。

这是从byte []到byte []哈希表映射打印的示例,其中映射之间用冒号分隔,这些映射是4字节键和32字节元素的字节数组。

[B@1ef9157:[B@1f82982

[B@181ed9e:[B@16d2633

[B@27e353:[B@e70e30

[B@cb6009:[B@154864a

[B@18aaa1e:[B@3c9217

[B@20be79:[B@9b42e6

[B@16925b0:[B@14520eb

[B@8ee016:[B@1742700

[B@1bfc93a:[B@acb158

[B@107ebe1:[B@1af33d6

[B@156b6b9:[B@17431b9

[B@139b78e:[B@16c79d7

[B@2e7820:[B@b33d0a

[B@82701e:[B@16c9867

[B@1f14ceb:[B@89cc5e

[B@da4b71:[B@c837cd

[B@ab853b:[B@c79809

[B@765a16:[B@1ce784b

[B@1319c:[B@3bc473

回答:

你正在查看的是对象ID,而不是内容的转储。

  • The [ means array.
  • The B means byte.
  • The @ separates the type from the ID.
  • The hex digits are an object ID or hashcode.

如果要打印数组的内容,则有很多方法。例如:

byte[] in = new byte[] { 1, 2, 3, -1, -2, -3 };

System.out.println(byteArrayToString(in));

String byteArrayToString(byte[] in) {

char out[] = new char[in.length * 2];

for (int i = 0; i < in.length; i++) {

out[i * 2] = "0123456789ABCDEF".charAt((in[i] >> 4) & 15);

out[i * 2 + 1] = "0123456789ABCDEF".charAt(in[i] & 15);

}

return new String(out);

}

一个完整的列表类型命名的可以在中找到JNI文档。

这是整个列表:

- B - byte

- C - char

- D - double

- F - float

- I - int

- J - long

- L - between an L and a ; is the full class name, using / as the delimiter between packages (for example, Ljava/lang/String;)

- S - short

- Z - boolean

- [ - one [ for every dimension of the array

- (return-type - method signature, such as (I)V, with the additional pseudo-type of V for void method

以上是 Java:“ [B @ 1ef9157””后面的语法和含义是什么?二进制/地址? 的全部内容, 来源链接: utcz.com/qa/425197.html

回到顶部