文章转载自:https://www.cnblogs.com/ydpvictor/archive/2012/09/09/2677260.html
在转载的文章中讲解的比较清晰。我这里就不重新介绍。
对于转载文章中对于 String a="aa"+"bb";创建几个对象?
图1
图2
运行图1上的代码,看编译后的class文件。New具有强制性,使用new一定会创建一个对象。当使用引号加文本的方式创建时,首先是ldc 检查常量池中是否有这个常量,有直接使用,不会创建新的对象。“ee” + “ff” 在编译期直接合并成 “eeff” 。看图2 中20行。
是否创建对象和2个因素有关:1 、是是否使用 new 2、常量池中是否已有这个常量。