首页 > Java > java教程 > 正文

为什么我的 Java 字节数组打印为'[B@1ef9157”而不是其内容?

Susan Sarandon
发布: 2024-10-30 05:03:02
原创
413 人浏览过

Why Does My Java Byte Array Print as

理解“[B@1ef9157”:二进制还是地址?

在 Java 中使用字节数组时,您可能会遇到“[ B@ 前缀”打印字节数组时。这可能会令人困惑,因为您可能希望看到数组的实际内容,而不是看似随机的字符串。

解释

“[B@ prefix”不是字节数组内容的表示。它是数组的对象 ID。此 ID 标识内存中的数组。

对象 ID 的结构

对象 ID 组成:

  • [ :表示它是一个数组
  • B:指定它是一个字节数组
  • @:将类型与对象 ID
  • 1ef9157:对象 ID 的十六进制表示

打印字节数组内容

如果您目标是打印字节数组的实际值,您将需要使用专门将字节转换为可打印格式的方法。例如,您可以使用 byteArrayToString() 方法:

<code class="java">byte[] in = new byte[] { 1, 2, 3, -1, -2, -3 };
System.out.println(byteArrayToString(in));</code>
登录后复制

byteArrayToString() 方法将字节数组转换为十六进制字符的字符串,使其更易于阅读。

JNI 类型命名法

“[B@ 前缀”是 JNI(Java 本机接口)类型命名法的一部分。此命名法用于识别本机代码中的 Java 类型:

  • B - byte
  • [ - array
  • @ - 类型和 ID 之间的分隔符
  • 1ef9157 - 对象 ID

有关 JNI 类型命名法的更多信息,请参阅官方 JNI 文档。

以上是为什么我的 Java 字节数组打印为'[B@1ef9157”而不是其内容?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板