一、==equals

== 在比较两个基本数据类型的时,比较的是两个基本类型的值。如果比较的是两个对象比较的是两个对象的地址。

equals 是 Ojbect 中的方法,在 Java 中所有的类都继承自 Object ,所以所有类都有 equals 方法,来看一下 Object 中 equals 方法

  1. public class Object {
  2. public boolean equals(Object obj) {
  3. return (this == obj);
  4. }
  5. }

通过上述代码能够看到,在 Object 中 equals 等价于 ==

不过通常 equals 在类中会被重写,比如:String

String equals 方法相关代码如下:

  1. public final class String
  2. implements java.io.Serializable, Comparable<String>, CharSequence {
  3. public boolean equals(Object anObject) {
  4. if (this == anObject) {
  5. return true;
  6. }
  7. if (anObject instanceof String) {
  8. String anotherString = (String)anObject;
  9. int n = value.length;
  10. if (n == anotherString.value.length) {
  11. char v1[] = value;
  12. char v2[] = anotherString.value;
  13. int i = 0;
  14. while (n-- != 0) {
  15. if (v1[i] != v2[i])
  16. return false;
  17. i++;
  18. }
  19. return true;
  20. }
  21. }
  22. return false;
  23. }
  24. }

通过上述代码能够知道,String 中的 equals ,对比的对象都要是字符串,两个字符串地址相同,或者值相同,就认定两个 String 相同。

再来看下 Integer 中的 equals,代码如下

  1. public final class Integer extends Number implements Comparable<Integer> {
  2. public boolean equals(Object obj) {
  3. if (obj instanceof Integer) {
  4. return value == ((Integer)obj).intValue();
  5. }
  6. return false;
  7. }
  8. }

Integer equals 进行对比判断很直接,对比的对象都要是 Integer ,且两个 Integer 对象值相等,这时候才认定两个 Integer 对象相等。

二、总结

==Object#equals 是等价的,它们对比两个对象都是比较两个对象的地址是否相等,以此来判断两个对象是否相等。

不过 == 不一定等价于 其他类的 equals ,因为 equals 通常会被重写,而是否等价,取决于重写后的代码实现。