String str1 = new String("abc")和 String str2 = "abc" 和 区别?

String str1 = new String("abc")和 String str2 = "abc" 和 区别?
两个语句都会去字符串常量池中检查是否已经存在 “abc”,如果有则直接使用,如果没有则会在常量池中创建 “abc” 对象。
String s = new String("abc")创建了几个对象?
很明显,它创建了一个或两个对象。如果字符串常量池中已经存在 "abc",则只创建一个对象;否则,创建两个对象。
当字符串常量池中不存在 "abc" 时,会创建如下两个对象:
- 一个是字符串字面量 "abc" 对应的字符串常量池中的实例。
- 另一个是通过 new String() 创建并初始化的实例,其内容与"abc"相同,存储在堆中。