String与new String()的区别

书中P174在讲到“ == 与 equals方法 ”时提到:

 

 

 

 

 

 

 

1,String str = "test";

以这种方式赋值时,JVM会先从常量池(实例池)中查询是否存在"test"这个对象,如果存在,直接把常量池中"test"的地址返回给str。

如果不存在,则会在常量池中创建"test"对象,并把该对象的地址返回给str。

 

 

 

 

 

2,String str = new String("test");

以这种方式赋值时,JVM会先从常量池中查询是否存在"test"这个对象,

若不存在则会在常量池中创建"test"对象,同时在堆中创建"test"这个对象,然后将堆中的这个对象的地址返回赋给引用str(这时创建了两份对象)。

若实例池存在则直接在堆中创建"test"这个对象,然后将堆中的这个对象的地址返回赋给引用str(这时创建了一份对象)。

 

 

 

posted @ 2021-05-05 18:29  OXYGEN1  阅读(41)  评论(0)    收藏  举报