toString()与new String()用法区别

2022年10月2日08:17:11

我们在平时工作中做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@73d4cc9e

newString结果:01234567012345670123456701234567
toString结果:[B@73d4cc9e

对比一下发现,相同的字节数组格式的解码数据,在做字符串转换时,输出的结果区别很大,哪一个用法是正确的?为什么?

这里应该用new String()的方法,因为Base64是一种转换编码格式的算法。


toString()与new String ()用法区别

  • toString():是调用了Object类中的toString()方法。一般是返回这么一个String:[class name]@[hashCode],实际上就是对象的哈希值。

        这点可以从toString()方法的源码看出

调用该方法将获取一个String:[class name]@[hashCode] 这么一个字符串对象。

  • new String(byte[] parameter):入参parameter是一个字节数组,使用java虚拟机默认的编码格式,将这个入参字节数组解码转换为对应的字符。若虚拟机默认的编码格式是ISO-8859-1,按照ascii编码表即可得到字节对应的字符。

如果恰当地使用?

  • new String():一般使用字符转码的时候,即字节数组转换为字符串的时候。比如在对数据做编解码/加解密转为二进制字符串时,就可以直接使用此方法进行转换处理。
  • toString():将对象打印输出的时候,或者需要获取对象的地址的时候使用
  • 作者:洒家肉山大魔王
  • 原文链接:https://blog.csdn.net/qq_27706119/article/details/125931839
    更新时间:2022年10月2日08:17:11 ,共 1533 字。