• String ‘+’
  1. 通过javap查看,编译器会对代码进行装箱操作,同时将String+String转化为StringBuilder实现

cip+ciop;
into
new StringBuilder(cip).append(ciop).toString();

  1. 可以修改 ‘+’的实现吗?

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

结论:

  1. String对象会在常量池中新建字符串
  2. 新new出来的对象不会判断常量池里面是否已经存在该变量,但intern会映射到第一个创建的相同字符串的地址;通过拼接创造的String会去常量池中查找。
  3. 当对String进行修改操作时,会直接修改String地址,所以严格说String是‘不可以被修改的’