String s =“abc“与String s = new String(“abc“)的区别&new String(“abc“)创建了几个对象

1.String s =“abc“与String s = new String(“abc“)的区别
String s =“abc”,如果字符串常量池中不存在abc,会在字符串常量池中创建一个abc;如果已经存在,则s指向已经存在的abc。
String s = new String(“abc”)会在堆中创建新的abc,不管之前是否存在。如果字符串常量池中不存在abc,则会在常量池中创建该字符串的引用。如果常量池中已经存在abc,则不会重新创建,常量池中的字符串不会重复。

2.new String(“abc”)创建了几个对象
从java1.7开始字符串常量池就搬到了堆,所以在字符串常量池中创建的abc也是在堆里
搬运自Javaguide
会创建1个或2个对象

如果字符串常量池中不存在对象abc的引用,那么会在堆中创建两个abc对象
如果字符串常量池中已存在对象abc的引用,则会在堆中创建1个abc对象

猜你喜欢

转载自blog.csdn.net/Miss_croal/article/details/132948427