String st1=new String("abc");是java中标准的对象创建方式,其创建的对象将直接放置到堆中,
每调用一次就会创建一个新的对象;
系统会先创建一个匿名对象"abc"存入堆内存,然后new关键字会在堆内存中又开辟一块新的空间,
然后把"abc"存进去,并且把地址返回给栈内存中的st1, 此时第一次放入的abc对象成为了一个垃圾对象,
因为它没有被任何栈中的变量指向,会被垃圾回收自动回收。
String strA = "abc";
String strB = "abc";
首先会去缓冲池中找有没有一个"abc"对象,如果没有,则新建一个,并且入池,所以此种赋值有一个好处,
下次如果还有String对象也用直接赋值方式定义为“abc”, 则不需要开辟新的堆空间,而仍然指向这个池中的"abc"
s trA和 strB 都是指向同一个内存地址
实际应用中应该直接赋值更简便,节省资源吧。 |