Java:语法和意义背后“[B @ 1ef9157”?二进制/地址?

嘿,我试图弄清楚什么是[B @前缀在java中的意思。当我尝试打印字节数组时,它们出来。然而,大小32和大小4的字节数组的长度相同。始终“[@ B1234567”。

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

这是一个字节[]到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,而不是内容的转储。

>平均数组。
> B表示字节。
> @将类型与ID分开。
>十六进制数字是一个对象ID或哈希码。

如果打算打印阵列的内容,有很多方法。例如:

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 documentation类型的术语可以在JNI documentation中找到。

以下是整个列表:

> B字节
> C – char
> D – 双
> F – 浮点数
>我 – int
> J – 长
> L ***全资格级*; ** – L和a之间;是完整的类名,使用/作为包之间的分隔符(例如,Ljava / lang / String;)
> S – 短
> Z – 布尔值
> [ – 一个[数组的每个维度]
>(***参数类型*)*** return-type * – 方法签名,如(I)V,附加伪类型的V为void方法

http://stackoverflow.com/questions/1040868/java-syntax-and-meaning-behind-b1ef9157-binary-address

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:Java:语法和意义背后“[B @ 1ef9157”?二进制/地址?