String a = null + "a";
String aa = null + "a";
System.out.println(a == aa);
输出false
String a = "null" + "a";
String aa = "null" + "a";
System.out.println(a == aa);
输出true
我当时答的都为true,因为我觉得结果都为字符串a,所以应该都在常量池里吧。但实际结果却让我吃惊,最后我用了一下午的时间终于找到了答案:
原因:(经查看相应的CLASS文件(也可以看反编译),得出以下结论)
第一个:实现原理为StringBuilder.append.toString,即产生了新的对象
第二个:编译器直接搞为String
启发:
由其他类型转换为字符串类型可以采用以下方法:
1.调用String.valueOf(目标对象)
2.目标对象+""
经过我本地测试发现第二种要比第一种速度快,(如果目标对象是基本数据类型的时候,会快很多)。原因我就不多说了吧。第二种编译器已经做了类型转换了,执行显然快了。