关于String创建几个对象的问题:
问题1:String Str = new String(“1对象1”);该过程创建了几个对象
(以前看到过,面试的时候回答错了…菜是原罪)
答案:一个或者两个
原因:我们知道Java的字符常量缓冲池(字符串池,字符串常量池)
例如:
String Str = new String("1对象1");
当JVM遇到上述代码时,会先检索常量池中是否存在“1对象1”,如果不存在“1对象1”这个字符串,则会先在常量池中创建这个一个字符串。然后再执行new操作,会在堆内存中创建一个存储“1对象1”的String对象,对象的引用赋值给str2。此过程创建了2个对象。
上图中 堆内创建的对象指向了常量池中的对象。
通过debug我们可以看到如下图所示的创建对象方式产生的对象。