字符串拼接方式赋值的对比
1.常量与常量的拼接结果在常量池。且常量池中不会存在相同内容的常量。
2.只要其中一个是变量,结果就在堆中。
3.如果拼接的结果调用intern()方法,返回值就在常量池中
String a=“ab”;存在于常量池中,创建一次(常量池中没有相同的对象)
String a=new String(“ab”);如果常量池中没有,则创建2次对象
intern:它的作用是查看常量池中是否存在和调用方法的字符串内容一样的字符串,如果有的话,就返回该常量池中的字符串,若没有的话,就在常量池中写入一个堆中该字符串对象的一个引用,指向堆中的该对象,并返回该引用。
@Test
public void test2() {
String a=new String("avc");
String b=new String("avc");
String c="avc";
System.out.println(a.intern()==c); //true
System.out.println(a.intern()==b.intern()); //true
System.out.println(a.intern()==a); //false
System.out.println(a.intern()==b); //false
System.out.println(a.intern()=="avc"); //true
}