1.String a="ab",String b="ab",a==b
结果:true
String储存在常量池,创建时先查看常量池,如果有则返回引用,没有则创建新的,所以相等。
2.String a="ab",String b="a"+"b",a==b
结果:true
编译时会省略+号,相当于String b="ab"
3.String a="ab",String b=new String("ab"),a==b
结果:false
通过new String创建,首先在常量池查看是否存在,不存在就创建,然后在堆内创建对象,拷贝常量池中的对象.
4.String a="ab",String b="a",String c=b+"b",a==c
结果:false
字符串与String对象通过"+"号连接实际上是通过StringBuilder或StringBuffer实现的.首先创建StringBuilder创建对象,然后通过append连接,最后toString返回
5.String a="ab",String b=new String("ab"),a==b.intern()
结果:true
intern()方法首先在常量池寻找是否存在该字符串,如果存在直接返回,否则创建返回