String str="abc";
String str=new String("abc");
二者区别,大家都知道前者这有一个对象,后者两个对象,为什么是这样就未必大家都知道了,先从网上找了一些比较好的答案,分享给大家:
首先得从new说起,new这个关键字实现的功能是生成相应对象并向JVM申请内存区域来存储该对象,后者就是这种情况,String(String original)这个构造函数的API说明:
初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。
由此可见,第二种是先在字符串常量池中创建了一个匿名的String对象"abc",(如果没有的话)作为实参传给此构造函数,再创建一个新的String对象并存在new关键字所申请到的内存中。
第一种没啥好说的,就是将"abc"字符串创建一个新引用,当然,如果这个字符串没有,新建一个即可,并且这些操作都是在编译期就完成了的。
|