String
- String ‘+’
- 通过javap查看,编译器会对代码进行装箱操作,同时将String+String转化为StringBuilder实现
cip+ciop;
into
new StringBuilder(cip).append(ciop).toString();
- 可以修改 ‘+’的实现吗?
Can we overload the operators defined in the Java language?
ABSOLUTELY NOT!
- String 内存
String str1 = "a";
String str2 = "b";
String str3 = "ab";
String str4 = str1 + str2;
String str5 = new String("ab");
System.out.println(str5.equals(str3));
System.out.println(str5 == str3);
System.out.println(str5.intern() == str3);
System.out.println(str3.intern() == str5);
System.out.println(str5.intern() == str4);
结果
true
false
true
false
false
String a = new String("ab");
String b = a;
System.out.println(a.equals(b));
a = "xx";
System.out.println(a.equals(b));
结果
true
false
结论:
- String对象会在常量池中新建字符串
- 新new出来的对象不会判断常量池里面是否已经存在该变量,但intern会映射到第一个创建的相同字符串的地址;通过拼接创造的String会去常量池中查找。
- 当对String进行修改操作时,会直接修改String地址,所以严格说String是‘不可以被修改的’
-
toString的实现