equals() 由具体的实现方法决定,不同类可以重载Object类的equals()方法。Object类的equals()为比较两个引用类型变量(内存地址)是否相等。String类中进行了重载,先比较引用类型变量(内存地址),再比较内容是否相等。
示例:
//创建String对象sa,字符串内容为"tea"的字面量都存储在相同的地址
String sa = "tea";
//强制创建一个新对象
String snew = new String("tea");
System.out.println("-----------------------");
List list = new ArrayList<String>();
list.add("tea");
System.out.println("tea"==list.get(0));
System.out.println("tea".equals(list.get(0)));
System.out.println(sa==list.get(0));
System.out.println("强制创建对象:"+(snew==list.get(0)));
System.out.println("先比较地址,再比较内容:"+snew.equals(list.get(0)));
输出结果:
-----------------------
true
true
true
强制创建对象:false
先比较地址,再比较内容:true
备注:上述示例还展示了String对象的不可变,即一旦创建后内容不可变,相同内容的字面量存储在同一块内存空间。