String的equals和等号问题
当你使用等号对两个对象进行比较的时候其实比较的是两个对象的地址。
String这个对象比较特殊:
1 public class EqualsTest { 2 public static void main(String[] args){ 3 String str1="wu"; 4 String str2="wu"; 5 6 String str3=new String("wu"); 7 System.out.println(str1==str2); 8 System.out.println(str2.equals(str3)); 9 System.out.println(str2==str3); 10 System.out.println(str2.equals(str3)); 11 12 str3=str3.intern(); 13 System.out.println(str2==str3); 14 System.out.println(str2.equals(str3)); 15 } 16 }
true true false true true true
从以上代码可以看出:创建str1后"wu"就在一个缓冲池中存在了,当创建str2时虚拟机会默认在缓冲池中去寻找是否有相应的字符,如果有就会将字符串的引用返回。其实str1和str2是指向同一个引用。str3的创建并不是到缓冲池中去寻找字符串而且新建一个,所以他的引用跟前面两个是不一样的。
但是字符串可以调用intern()方法,意思是到缓冲池中去找字符串,如果找到就将引用返回,否则就新建一个!