Java面试 - == 和 equals 的区别?

==:若是比较的对象是基本数据类型,则比较的是数值是否一致;若是比较的是引用数据类型,则比较的是对象的地址值是否一致。
equals():equals()方法不能用于比较基本数据类型的对象,若是对象和自身进行比较,则equals()方法与==是同样的。对于String类 Date类 File类等 可重写equals() 方法用于比较对象的属性内容是否一致。java

举例
若是a,b 是基本类型,那么== 运算符比较的是什么呢?测试

public class Demo {
  private static int a = 100;
  private static int b = 100;
  public static void main(String[] args) {
    if(a == b){
      System.out.print("由于a,b是基本类型,因此此时比较的是a, b 的值");
    }
  }
}

运行Debug模式,测试一下
==运算符,比较基本数据类型的值.png
由此可知,当a,b是基本类型,那么== 运算符比较的就是基本类型的值。
若是a,b 是引用类型, 那么== 运算符比较的仍是a,b 的值吗?this

public class Demo {

  private static String a = "china";
  private static String b = "china";

  public static void main(String[] args) {
    if(a == b){
      System.out.print("由于a, b是引用类型, 因此此时比较的是对象a, b的地址值");
    }
  }
}

运行Debug模式,测试一下
==运算符,比较引用数据类型的对象地址.png
由此可知,当a,b是引用类型,那么== 运算符比较的就是引用类型的对象地址值。
若是a,b 是引用类型,那么equals()方法比较的是什么呢?3d

public class Demo {
  
  private static String a = "china";
  private static String b = "china";

  public static void main(String[] args) {
    if(a.equals(b)){
      System.out.print("由于a, b是引用类型, 因此此时比较的是对象a, b的地址值");
    }
  }
}

运行Debug模式,测试一下
equals()方法,比较引用数据类型的对象地址.png
由此可知,默认状况下,equals()方法比较的是对象与自身是否一致。当对象与自身一致时,equals()方法与== 是同样的。
若是重写equals()方法,是否能够比较对象的内容呢?code

class Pig {
  private String name;
  public void setName(String name){
    this.name = name;
  }
  public String getName(){
    return name;
  }
  //  重写equals()方法, 用于比较对象的属性内容是否一致
  public boolean equals(Object anObject) {
    // 判断对象与自身是否一致
    if (this == anObject) {
      return true;
    }
   //  判断anObject与String是否为同类或存在继承关系
    if (anObject instanceof String) {
        return true;
    }
    //判断是同一类或者子父类关系,则将Object类型强转为Pig
    Pig pig = (Pig)anObject;
   // 比较pig的属性name的内容是否一致
    if(this.name == pig.name && this.name.equals(pig.name)) {
      return true;
    }else {
      return false;
    }
  }
}

运行Debug模式,测试一下
重写equals()方法,比较对象的属性内容.png
由此可知,重写equals()方法,equals()方法是能够比较对象属性内容是否一致的。对象

相关文章
相关标签/搜索