关键词:字符串常量、字符串变量(引用)
为了了解字符串常量相加和字符串变量相加,首先看一个小例子:
public class SocketTest {
public static void main(String[]args)throws Exception{
String str1="abc";
String str2="abc";
String str3="eee";
String str4="abceee";
String str5=str1.concat(str3); //底层源码:用了new,创建了新对象
System.out.println("abc"+"eee"=="abceee");//第一种情况:字符串常量相加,不含字符串变量
System.out.println("abc"+"eee"==str4);
System.out.println("abc"+str3=="abceee");//第二种情况:含字符串变量相加
System.out.println(str1+str3=="abceee");
System.out.println(str4==str5);
}
}
//输出的结果:
true
true
false
false
false
分析:
1 字符串相加时如果含有字符串变量,则先在堆中开空间,再拼接,本质是new了StringBuilder对象进行append操作,拼接后调用toString()返回String对象。
2 字符串相加时不含字符串变量,是先加,然后在常量池找,如果有就直接返回,否则,就在常量池中创建一个字符串常量,不会用到StringBuilder。