String str1 = "abcd"; String str2 = new String("abcd")
String a = "abcd"; String b = "abcd"; System.out.println(a==b); //结果为true; System.out.println(a.equals(b)); // 结果为true
用""建立的a,b两个字符串 == 和 equals比较结果返回都为true,这是由于a,b都指向了方法区的同一个字符串,因此当一样的一个字符串用""重复建立时只是引用了方法区的这个字符串的值。java
String c = new String("abcd"); String d = new String("abcd"); System.out.println(c==d); //结果为false; System.out.println(c.equals(d)); // 结果为true
用new建立的两个字符串,equals比较返回结果为true,由于equals比较的是两个字符串的值,而==为false说明比较的时两个字符串的引用,也就是指向的地址不相同,用new建立的字符串每次都会在JVM堆中建立,因此c,d实际上是引用两个不一样的字符串,因此==比较的结果固然为false。code