==和equals()的区别

==:运算符

  1. 1、可以使用在基本数据类型变量和引用数据类型变量中
  2. 2、如果比较的是基本数据类型变量:比较两个变量保存的数据是否相同(不一定数据类型相同)如果比较的是引用数据类型变量:比较两个对象的地址值是否相同,即两个对象是否指向同一个对象实体

equals()方法的使用:

  1. 1、只是一个方法,而非运算符
  2. 2、只能适用于引用数据类型
  3. 3Object类中equals()的定义:
  1. public boolean equals(Object obj){
  2. return(this==obj);
  3. }
  1. 4、像StringDateFile、包装类等都重写了Object类中的equals()方法,重写之后比较是实体内容是否相同

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

例:

  1. Customer cust1=new Customer("Tom",21);
  2. Customer cust2=new Customer("Tom",21);
  3. System.out.println(cust1==cust2);//false
  4. String str1=new String("atguigu");
  5. String str2=new String("atguigu");
  6. System.out.println(str1==str2);//false
  7. System.out.println(cust1.equals(cust2));//false
  8. System.out.println(str1.equals(str2));//true

重写equals()方法

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

  1. public boolean equals(Object obj){
  2. if(this==obj){
  3. return true;
  4. }
  5. if(obj instanceof Customer){
  6. Customer cust=(Customer)obj;
  7. //比较两个对象的每个属性是否相同
  8. if(this.age==cust.age&&this.name.equals(cust.name)){
  9. return true;
  10. }else{
  11. return false;
  12. }
  13. }
  14. return false;
  15. //或
  16. return this.age==cust.age&&this.name.equals(cust.name);
  17. }