Java String getBytes非确定性

Mar*_*rco 2 java string serialization

我无法弄清楚为什么在String上调用两次getBytes()会返回两个不相等的字节数组():

final String aString = "hello world";
System.out.println(aString.getBytes());
System.out.println(aString.getBytes());
System.out.println(aString.getBytes());
Run Code Online (Sandbox Code Playgroud)

打印:

[B@59887d29
[B@fd13cab
[B@71e606a9
Run Code Online (Sandbox Code Playgroud)

例如,以下断言总是失败:

Assert.assertEquals(aString.getBytes(), aString.getBytes());
Run Code Online (Sandbox Code Playgroud)

文档中,我没想到任何不确定性!我错过了什么?

转换回String时,结果是预期的结果,所以我最好的猜测是一些未初始化的填充位?

即以下断言总是通过:

Assert.assertEquals(new String(aString.getBytes()), new String(aString.getBytes()));
Run Code Online (Sandbox Code Playgroud)

Sot*_*lis 6

Assert#assertEquals(Object, Object)用于Object#equals(Object)比较其参数,但数组类型不会覆盖该方法.所以两个数组实例总是不同的.

使用Assert#assertArrayEquals(byte[], byte[])比较类型的数组byte.