String和new String有什么区别?

可能重复:
Java中表达式“new String(…)”的目的是什么?

这两个陈述之间有什么区别:

String a1 = new String("abc"); 

 String a2 = "abc"; 

如果你能说明差异,那就太好了。

第一个是创建一个新的String对象; 第二个是有效地使用已经存在的(它是在加载类文件时创建的。)几乎没有理由使用String(String)构造函数。

(我说几乎是因为有一种情况:如果你通过调用substring()分解一个巨大的String然后丢弃原始的,你可以通过使用这个构造函数从子字符串创建新的String来节省内存。这是但实际上这是一个不起眼的案例。)