当"+"两端均为编译期确定的字符串常量时,编译器会进行相应的优化,直接将两个字符串常量拼接好。所以只会创建一个"abcdef"对象
- String s1 = "abc" + "def";//一个
-
”+“中有String对象的时候,所有没有在常量池中的字符串都会被创建一个对象
- s1="abc";
- String s2 ="abc"+s1+"def";
- 创建了三个对象,
- s1="abc"一个
- s2中:"abc"已经存在,不再创建,"def"一个,"abcdef"一个。
- String s = new String("abc") + new String("abc");
- 四个
- 第一个new String("abc")创建了两个
- 第二个new String("abc")创建了一个(常量池中有"abc"不再创建)
- new String("abc") + new String("abc")一个
- String s = new String("abc") + new String("def");
- 五个
- 第一个new String("abc")创建了两个
- 第二个new String("def")创建了两个
- new String("abc") + new String("def")一个
- String s = "abc" + new String("def");
- 四个
- "abc"一个
- new String("def")两个
- "abc" + new String("def")一个