只要String在没有通过new创建新的字符串对象,相同的字符串无论出现多少次,都是同一个;但一旦new创建新的了,就会申请新的空间来存储,即使内容相同,但是地址不同也不能当做同一个使用
char[] chs = {'h','e','l','l','o'};
String s1 = new String(chs);
String s2 = new String(chs);
String s3 = "hello";
String s4 = "hello";
//1
System.out.println((s1==s2)+","+(s1==s3)+","+(s3==s4));//false false true
//2
System.out.println((s1.equals(s2))+","+(s1.equals(s3))+","+(s3.equals(s4)));//true true true
public static void main(String[] args) {
String s1 = "abc";
String s2 = "abc";
String s3 = "ABC";
String s4 = "a";
String s5 = s4 + "bc";//这句代码相当于有new创建了个内存空间,所以s2不等于s5
String s6 = "a" + "bc";//这种拼接出来的没有new创建新的内存空间,所以s2等于s6
//1
System.out.println(s1.equals(s2)+" "+s1.equalsIgnoreCase(s3)+" "+s2.equals(s5)+" "+s3.equalsIgnoreCase(s5));//true true true true
//2
System.out.println((s1==s2)+" "+(s1==s3)+" "+(s2==s5)+" "+(s2==s6));//true false false true
//利用字符串定义的变量拼接别的东西就相当于新开了一个内存空间
//在通过字符串拼接字符串没有开辟新的内存空间
}



