public static strictfp void main(String[] args) {
/*
* 如果虚拟机始终将相同的字符串共享 , 就可以使用 == 运算符检测是否相等。 但实际上只有字符串常量是共享的
* 而 + 或 substring等操作产生的结果并不是共享的。 因此 , 千万不要使甩 == 运算符测试字符串的相等性
*/
String str = "a";
System.out.println(str=="a");//true
str = str+"b";
System.out.println(str);//ab
System.out.println(str=="ab");//false
System.out.println("ab".equals(str));//true
}
声明变量时候,如果右边都是常量的情况:
public class Demo002 {
public static void main(String[] args) {
String s3 = "a"+"b"+"c";
System.out.println(s3=="abc");//true
s3 = s3+"d";
System.out.println(s3=="abcd");//false
String s4 = s3+"e";
System.out.println(s4=="abcde");//false
}
}
编译的class文件,通过该class可以发现 String s3 = "a"+"b"+"c";被编译成 String s3 = "abc";所以该"abc"是共享的,存在于常量 池。
public class Demo002
{
public static void main(String[] args)
{
String s3 = "abc";
System.out.println(s3 == "abc");
s3 = s3 + "d";
System.out.println(s3 == "abcd");
String s4 = s3 + "e";
System.out.println(s4 == "abcde");
}
}