曾经有一段时间我一直认为new String()和toString是一样的,
直到一天我遇到了他…
byte[] b
将他转化为String类型,使用上面两种方法差距就来了
String s = new String(b);
String s1= b.toString;
System.out.println(s+" "+s1);
这两个结果打印出来你会发现还是不一样的
Java对象都继承于Object,Object中提供了toString方法,用于简单返回该类的类签名。在Java中,数组也可以看作是一种对象,显然byte[]也是一种继承与Object的对象,并且它没有重写Object的toString方法,因此使用byte[]的toString返回的字符串,仅仅是byte[]的类签名,而不是对应的值。
new String(b)是根据parameter是一个字节数组,使用java虚拟机默认的编码格式,将这个字节数组decode为对应的字符。若虚拟机默认的编码格式是ISO-8859-1,按照ascii编码表即可得到字节对应的字符。
综上:new String()是得到对应的字符值
toString得到的是对象内存的地址值