先 看一段代码
String str = "a";
String str1 = "a";
System.out.println(str==str1); // true
System.out.println(str.equals(str1));// true
String str2 = new String("a");
String str3 = new String("a");
System.out.println(str2==str3); // false
System.out.println(str2.equals(str3));// true
为什么前面 两个为true 后面则是一个为true 一个为false
原因很简单: str 和 str1 相当于基本数据类型不管是== 还是equals都是直接拿他的值(a) 进行比较,当然是true
后面一个呢,是两个引用类型 == 时,比较的是 str2 和 str3 的内存地址,当然不一样。而equals 则是把它们的值拿出来进行比较。所以想通。