JAVA String的问题
String s1 = "字符串";
String s2 = "字符串";
System.out.println(s1==s2); //输出true
String s3 = new String("字符串");
String s4 = new String("字符串");
System.out.println(s3==s4); //输出false
String s5 = "字"+"符串";
String s6 = "字符串";
System.out.println(s5==s6); //输出true,编译阶段会将直接量直接计算出来,相当于省略+
String s7 = "字";
String s8 = "符串";
String s9 = s7 + s8;
String s10 = s7 + s8;
System.out.println(s9==s10); //输出false,因为s9和s10是在运行阶段而不是编译阶段确定的
final String s11 = "字";
final String s12 = "符串";
String s13 = s11 + s12;
String s14 = s11 + s12;
System.out.println(s3==s14); //输出true,因为final会进行宏替换,如果final变量声明时就指定了初始值并且编译时就能确定,
//那么这个变量在编译时就全被替换为了确定下来的值,赋值语句就被忽略,相当于变量s11和s12不存在
以上我们知道了如果是直接量,不管是否使用了+连接,在内存中都相当于指向了同一个对象,因为直接量+会在编译阶段计算出来。但如果是变量形式的两个String类型相加,则会在运行时创建两个相同的对象。
综上编译阶段确定下来的相同的直接量Java只会创建一个对象,所有相同的引用变量都指向这个对象。
浙公网安备 33010602011771号