You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Java String的getBytes方法返回结果不一致?

问题解答:两次打印key.getBytes()结果不同的原因

你这段代码里两次调用key.getBytes()却打出不同结果,核心原因和println无关,本质是**String.getBytes()每次调用都会生成一个全新的字节数组对象**。

具体解释:

  • Java里数组属于引用类型,当你直接把数组传给System.out.println()时,它会调用数组默认的toString()方法,输出的是数组对象的内存地址哈希值(格式是[B@xxxxxx,其中[B代表字节数组,@后面是对象的哈希码)。
  • 每次调用key.getBytes(),JVM都会新建一个字节数组实例,把字符串的字节内容复制进去。这两个数组是完全独立的对象,内存地址不一样,所以打印出的哈希值自然不同。
  • 如果你想验证数组的实际内容是相同的,改用Arrays.toString(key.getBytes())打印数组元素,两次输出就会完全一致。

修改后的验证代码:

import java.util.Arrays;

public class Maintest {
    public static void main(String[] args) {
        String key = "12345testabcd";
        // 打印数组实际内容,两次结果一致
        System.out.println(Arrays.toString(key.getBytes()));
        System.out.println(Arrays.toString(key.getBytes()));
        // 原写法,打印数组对象哈希值,两次结果不同
        System.out.println(key.getBytes());
        System.out.println(key.getBytes());
    }
}

总结:

  • 不是println的问题,它只是如实输出了传入对象的toString()结果;
  • 两次getBytes()返回的数组内容完全相同,只是对象本身是不同的实例,导致哈希值不同。

内容的提问来源于stack exchange,提问作者kk luo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 16:32:02