Base64.getDecoder()使用相同的字符串输入返回不同的答案

时间:2018-05-28 16:28:06

标签: java base64

我对这个问题感到困惑。平台在win7 java8上。

示例代码:

String encryptedData = "0019ZfGO0nefTb2kIuHO0M3hGO09ZfGF";
Base64.Decoder decoder = Base64.getDecoder();
byte[] dataByte = decoder.decode(encryptedData);
System.out.println(dataByte);
dataByte = decoder.decode(encryptedData);
System.out.println(dataByte);

输出:

[B@15db9742
[B@6d06d69c

确切的输入得到了不同的结果。 不知道是否还有清除状态并且每次都能使结果保持一致吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

在Java中,数组不会覆盖toString(),因此如果您尝试直接打印一个数组,则会获得" className + @ + hashCode的十六进制数组",由Object.toString()定义 注意:只需通过引用变量打印数组意味着您正在调用该数组对象的toString()方法。

由于decoder.decode(encryptedData)每次都会返回new byte[],因此当您打印参考变量时,它会给出不同的值。
例如:System.out.println(dataByte);//output:[B@15db9742

您可以使用标准库函数来打印数组的包含。有很多方法可以实现这一目标。下面是一些例子:
System.out.println(Arrays.toString(dataByte));
System.out.println(dataByte.toList());