为何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
相关产品推荐
相关产品推荐

