Object.java
public boolean equals(Object var1) { return this == var1; }
String.java(jdk1.8)
public boolean equals(Object var1) { if (this == var1) { return true; } else { if (var1 instanceof String) { String var2 = (String)var1; int var3 = this.value.length; if (var3 == var2.value.length) { char[] var4 = this.value; char[] var5 = var2.value; for(int var6 = 0; var3-- != 0; ++var6) { if (var4[var6] != var5[var6]) { return false; } } return true; } } return false; } }
------------------------------------------------------------------------------------------------------
测试代码:
String str1="abc"; String str2="abc"; String str3= new String("abc"); String str4= new String("abc"); //System.out.println(str1=="abc"); //true //System.out.println(str1==str2); //true //System.out.println(str1.equals(str2)); //true //System.out.println(str1.equals(str3)); //true //System.out.println(str3.equals(str4)); //true //System.out.println(str3==str4); //false //System.out.println(str1==str4); //false
-----------------------------------------------------------------------------------------------------------------
总结:
1)对于==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;
如果作用于引用类型的变量,则比较的是所指向的对象的地址
2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量
如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;
诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。