String s = new String("xyz") 究竟创建了几个对象
两个或者一个:
一个是编译时是放在常量池中,另一个是运行时放在堆中,两个都是“xyz”。
常量池中只能有一个“xyz”,所以当常量池中有一个了,就不会再创建了,运行时肯定会创建一个。
注:如果是String s= "xyz"这样的,s这个引用就会直接指向常量池的"xyz",而不会是指向你在堆中创建的“xyz”。
两个或者一个:
一个是编译时是放在常量池中,另一个是运行时放在堆中,两个都是“xyz”。
常量池中只能有一个“xyz”,所以当常量池中有一个了,就不会再创建了,运行时肯定会创建一个。
注:如果是String s= "xyz"这样的,s这个引用就会直接指向常量池的"xyz",而不会是指向你在堆中创建的“xyz”。