String不同拼接操作的对比
@Test
public void test3(){
String s1="javaEE";
String s2="hadoop";
String s3="javaEEhadoop";
String s4="javaEE"+"hadoop";
String s5=s1+"hadoop"; //有变量名参与,都不是在常量池了
String s6="javaEE"+s2; //有变量名参与,都不是在常量池了
String s7=s1+s2; //有变量名参与,都不是在常量池了
String s8=s5.intern();//拼接的结果调用intern()方法,返回值就在常量池
System.out.println(s3==s4);//true 字面量的连接,常量池中还是一样的,所以地址一样
System.out.println(s3==s5);//false //有变量名参与,都不是在常量池了
System.out.println(s3==s6);//false //有变量名参与,都不是在常量池了
System.out.println(s3==s7);//false //有变量名参与,都不是在常量池了
System.out.println(s5==s6);//false //有变量名参与,都不是在常量池了
System.out.println(s5==s7);//false //有变量名参与,都不是在常量池了
System.out.println(s6==s7);//false //有变量名参与,都不是在常量池了
System.out.println(s3==s8);//拼接的结果调用intern()方法,返回值就在常量池
}
用final将变量变为常量
@Test
public void test4(){
String s1="javaEEhadoop";
String s2="javaEE";
String s3=s2+"hadoop";
System.out.println(s1==s3);//false
final String s4="javaEE";//s4变为常量了
String s5=s4+"hadoop";
System.out.println(s1==s5);//true
}