String s = "abc"; 是在常量池中生成了一个字符串常量(若常量池中目前没有"abc"),而引用s指向它。 String s = new String("abc"); 是先在常量池中生成了一个字符串常量(若常量池中目前没有"abc"),然后在heap中生成一个String对象,该对象的内容就是这个常量,然后才是String类型的引用s指向这个String对象。
你不觉得String s = "abc";这种形式比String s = new String("abc");这种形式使用起来简单吗?这不就是好处?另外,前者支持“+”的操作,即 s1 + s2,后者不支持。而之所以String s = new String("abc");这种形式会存在,是因为java中的String是对象,应当有这种按照一般生成对象的方法来生成String对象,即用new关键词生成新对象。
用String s = "ABC"; 不要用String s = new String("ABC"); 前者有编译器控制优化,后者无故增加开销。
是在常量池中生成了一个字符串常量(若常量池中目前没有"abc"),而引用s指向它。
String s = new String("abc");
是先在常量池中生成了一个字符串常量(若常量池中目前没有"abc"),然后在heap中生成一个String对象,该对象的内容就是这个常量,然后才是String类型的引用s指向这个String对象。
不要用String s = new String("ABC");
前者有编译器控制优化,后者无故增加开销。