我们在平时工作中做Base6编解码数据转字符串时经常会遇到toString()与new String(),对于这两者的用法区别简单总结一下。
测试用例:
@Test public void myTest1() { String value = "01234567012345670123456701234567"; String base64String = Base64.toBase64String(value.getBytes()); System.out.println("Base64编码:" + base64String ); byte[] decode = Base64.decode(base64String); System.out.println("Base64解码:" + decode ); }
输出结果:
Base64编码:MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1Njc=
Base64解码:[B@73d4cc9e
对解码后的数据处理:
在上边的测试用例稍加改动:
@Test public void myTest1() { String value = "01234567012345670123456701234567"; String base64String = Base64.toBase64String(value.getBytes()); System.out.println("Base64编码:" + base64String ); byte[] decode = Base64.decode(base64String); System.out.println("Base64解码:" + decode ); String newString = new String(decode); System.out.println("newString结果:" + newString ); String toString = decode.toString(); System.out.println("toString结果:" + toString ); }
输出结果:
Base64编码:MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1Njc=
Base64解码:[B@73d4cc9enewString结果:01234567012345670123456701234567
toString结果:[B@73d4cc9e
对比一下发现,相同的字节数组格式的解码数据,在做字符串转换时,输出的结果区别很大,哪一个用法是正确的?为什么?
这里应该用new String()的方法,因为Base64是一种转换编码格式的算法。
这点可以从toString()方法的源码看出
调用该方法将获取一个String:[class name]@[hashCode] 这么一个字符串对象。