==和equals()

简介: ==和equals()

==和equals()

面试题:==和equals()的区别

一、回顾==的使用


==:运算符

1.可以使用在基本数据变量和引用数据类型变量中

2.如果比较的是基本数据变量:比较两个变量保存的数据是否相等。(不一定类型要相同)

如果比较的是引用数据类型变量:比较两个对象的地址值是否相同,即两个引用是否是同一个对象实体。

3.补充:==符号使用时:必须保证符号两边的类型一致

二、equals()方法的使用:


1.是一个方法,而非运算符

2.只能适用于引用数据类型

3.Object类中equals()的定义:

public boolean equals(Object obj) {

return (this == obj);

}


说明:Object类中定义的equals()和==的作用是相同的:比较两个对象的地址值是否相同,即两个引用是否是同一个对象实体。


4.像String、date、File、包装类等都重写了 Object类中equals()方法。重写以后,比较的不是两个引用的地址是否相同,而是比较两个对象的“实体内容”是否相同。

5.通常情况下,我们自定义的类如果使用equals()的话,也通常是比较两个对象的“实体内容”是否相同。那么,我们就需要对Object类中equals()进行重写。

重写的原则:比较两个对象的实体内容(如该题中的name和age)是否相同。

在B站学习java写的代码

代码如下

/*
 * 面试题:==和equals()的区别
 * 
 * 一、回顾==的使用
 * ==:运算符
 * 1.可以使用在基本数据变量和引用数据类型变量中
 * 2.如果比较的是基本数据变量:比较两个变量保存的数据是否相等。(不一定类型要相同)
 *   如果比较的是引用数据类型变量:比较两个对象的地址值是否相同,即两个引用是否是同一个对象实体。
 * 3.补充:==符号使用时:必须保证符号两边的类型一致
 * 
 * 二、equals()方法的使用:
 * 1.是一个方法,而非运算符
 * 2.只能适用于引用数据类型
 * 3.Object类中equals()的定义:
 *   public boolean equals(Object obj) {
        return (this == obj);
     }
 *   说明:Object类中定义的equals()和==的作用是相同的:比较两个对象的地址值是否相同,即两个引用是否是同一个对象实体。
 * 
 * 4.像String、date、File、包装类等都重写了 Object类中equals()方法。重写以后,比较的不是
 *   两个引用的地址是否相同,而是比较两个对象的“实体内容”是否相同。
 *   
 * 5.通常情况下,我们自定义的类如果使用equals()的话,也通常是比较两个对象的“实体内容”是否相同。那么,我们
 * 就需要对Object类中equals()进行重写。
 * 重写的原则:比较两个对象的实体内容(如该题中的name和age)是否相同。
 */

EqualsTest类

package com.day0127_1;
import java.util.Date;
public class EqualsTest {
  public static void main(String[] args) {
    //基本数据类型
    int i = 10;
    int j = 10;
    double d=10.0;
    System.out.println(i==j);//true
    System.out.println(i==d);//true
//    boolean b = true;
//    System.out.println(i==b);//The operator == is undefined for the argument type(s) int, boolean
    char c=10;
    System.out.println(i==c);//true
    char c1='A';
    char c2=65;
    System.out.println(c1==c2);//true
    //引用数据类型
    Customer cust1 =new Customer("Tom",21);
    Customer cust2=new Customer("Tom",21);
    System.out.println(cust1==cust2);//false
    String str1=new String ("Tom");
    String str2=new String ("Tom");
    System.out.println(str1==str2);//false
    System.out.println("*****************");
    System.out.println(cust1.equals(cust2));//false //boolean java.lang.Object.equals(Object obj)//重写之后,结果是true
    System.out.println(str1.equals(str2));  //true  //boolean java.lang.String.equals(Object anObject)
    Date date1=new Date(32432525324L);
    Date date2=new Date(32432525324L);
    System.out.println(date1.equals(date2));  //true
  }
}

Customer类

package com.day0127_1;
public class Customer {
  private String name;
  private int age;
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public int getAge() {
    return age;
  }
  public void setAge(int age) {
    this.age = age;
  }
  public Customer() {
    super();
  }
  public Customer(String name, int age) {
    super();
    this.name = name;
    this.age = age;
  }
  //重写的原则:比较两个对象的实体内容(即:name和age)是否相同
  //手动实现equals()的重写
//  @Override
//  public boolean equals(Object obj) {
//    if(this ==obj) {
//      return true;
//    }
//    
//    if(obj instanceof Customer){
//      Customer cust =(Customer)obj;
//      //比较两个对象美观属性是否都相同
      if(this.age==cust.age&&this.name.equals(cust.name)) {
        return true;
      }else {
        return false;
      }
//      
//      //或
//      return this.age==cust.age&&this.name.equals(cust.name);
//    }else {
//      return false;
//    }
//    
//    
//  }
  //自动生成的equals()
  @Override
  public boolean equals(Object obj) {
    if (this == obj)
      return true;
    if (obj == null)
      return false;
    if (getClass() != obj.getClass())
      return false;
    Customer other = (Customer) obj;
    if (age != other.age)
      return false;
    if (name == null) {
      if (other.name != null)
        return false;
    } else if (!name.equals(other.name))
      return false;
    return true;
  }
}
相关文章
|
18天前
|
Java
== 和 equals 有什么区别?
本文解释了在Java中,"=="用于比较基本数据类型的值或引用类型的引用是否相等,而"equals"默认也是比较引用,但常常被重写为比较对象的值是否相等,例如在String和Integer类中,并且提供了如何自定义"equals"方法的示例。
56 0
== 和 equals 有什么区别?
|
2月前
|
Java
“a == b” 和 “a.equals(b)” 的区别
【8月更文挑战第22天】
40 0
|
4月前
|
存储 Java
equals与==区别
equals与==区别
34 0
equals 和 == 的区别?
equals 和 == 的区别?
77 0
|
5月前
! [ ] == ! [ ] 和 ! [ ] == [ ] 结果是什么? 为什么?
! [ ] == ! [ ] 和 ! [ ] == [ ] 结果是什么? 为什么?
38 0
|
Java
== 和 equals 的区别是什么
== 运算符用于比较两个对象的引用是否相等。它对于基本类型比较值的相等性,对于引用类型比较引用的相等性。当使用 == 比较两个对象时,它会检查它们是否指向相同的内存地址。如果两个对象具有相同的内存地址,则它们被认为是相等的。
65 1
equals和 == 的区别
equals和 == 的区别
76 0
|
存储
什么时候 a == 1 && a == 2 && a == 3 为 true?
什么时候 a == 1 && a == 2 && a == 3 为 true?
129 0
什么时候 a == 1 && a == 2 && a == 3 为 true?
|
存储
==与equals方法的区别
==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量的引用地址是否相等,只能用==操作符。
128 0