请看下面这段代码:
public static void main(String[] args) {
String s1 = "哈哈哈哈";
String s2 = "哈哈哈哈";
String s3 = new String("哈哈哈哈");
String s4 = new String("哈哈哈哈");
String s5 = "11" + s1;
String s6 = "11" + s1;
String s7 = "111" + "222";
String s8 = "111" + "222";
System.out.println(s1 == s2);
System.out.println(s1 == s3);
System.out.println(s3 == s4);
System.out.println(s5 == s6);
System.out.println(s7 == s8);
System.out.println(s3.equals(s1));
System.out.println(s3.equals(s4));
System.out.println(s5.equals(s6));
}
输出结果为:
分析:
- String对象一旦创建不能被修改,是不可变的。StringBuffer、StringBuilder可以改变字符串长度;
- String s1 = “哈哈哈哈” 声明了一个字符串对象,而s1中存放的字符串对象的引用,s2同理,故 s1 == s2 结果为true;
- String s3 = new String(“哈哈哈哈”)new一个字符串,则是产生了一个新的对象,即便两个字符串内容相同,故 s3 == s4 结果为false;
- String s5 = “11” + s1;因为s1是变量,在运行时才知道具体值,所以s5 == s6 结果为false,而s7 == s8结果为true;