String str=new String("abc")和String str="abc"的区别是:java运行环境会建立一个常量池,执行语句String str="abc"时,首先查看字符串池中是否存在字符串"abc",没有的话在新建一个变量。String str=new String("abc")不管存不存在一定会新建一个变量,此时的变量不在常量池里面,而是在堆里面,常量池里的变量名只是一个引用。普通的类创建的对象是放在堆里面的,对象的赋值是引用的过程。