文章转载自:https://www.cnblogs.com/ydpvictor/archive/2012/09/09/2677260.html

在转载的文章中讲解的比较清晰。我这里就不重新介绍。

对于转载文章中对于 String a="aa"+"bb";创建几个对象?

                                                String 创建对象

                                                                          图1

String 创建对象

                                                                           图2

 

运行图1上的代码,看编译后的class文件。New具有强制性,使用new一定会创建一个对象。当使用引号加文本的方式创建时,首先是ldc 检查常量池中是否有这个常量,有直接使用,不会创建新的对象。“ee” +  “ff”  在编译期直接合并成  “eeff” 。看图2 中20行。

是否创建对象和2个因素有关:1 、是是否使用  new   2、常量池中是否已有这个常量。


相关文章: