4.3Java中"=="和equals方法

4.3Java中"=="和equals方法

"=="代表比较双方是否相同

  • 基本类型表示值相等

  • 引用类型表示地址相等---指同一个对象

equals方法

特点:

  • 由Object类中定义:public boolean equals(Object obj)方法

  • 提供定义"对象的内容相等"的逻辑---经常回去重写equals方法

  • 源码里面定义的内容是默认去看二者是否是同一个对象

实例:

package cn.Lucifer.oo;

import javax.jws.soap.SOAPBinding;

public class TestEquals {
   public static void main(String[] args) {
       Object obj;
       String str;

       //创建两个User对象
       User u1 = new User(21,"Lucifer","3123123");
       User u2 = new User(21,"Lucifer","12312123");

       System.out.println(u1 == u2); //地址不同,不同的对象
       System.out.println(u1.equals(u2));
  }
}

//定义一个新的类
class User{
   int id;
   String name;
   String pwd;

   public User(int id, String name, String pwd){
       super();
       this.id = id;
       this.name = name;
       this.pwd = pwd;
  }

   //hashCode的散列码
   @Override
   public int hashCode(){
       final int prime =31;
       int result = 1;
       result = prime * result + id;
       return result;
  }

   //重写equals方法
   @Override
   public boolean equals(Object obj){
       //根据id,id相同就认为是相同对象---id于Object obj进行判断
       //因为传递的时候是Object类型,所以要做一个强制转型
       if(this == obj) //obj是形参,this是指从写的"我"这个当前对象
           return true;
       if(obj == null) //如果传进来的obj形参是空,返回false
           return false;
       if(getClass() != obj.getClass()) //如果传进来的obj类型和"我"这个对象的类型不一样,也返回false
           return false;
       User other = (User) obj; //都符合,创建个对象将形参转型为User
       if(id != other.id) //如果id不相等则返回false
           return false;
       return true;
  }
   /*
   重写以后就会返回true,因为根据id判断
    */
}

String的equals源码就是对字符串的挨个字符进行比较

equals方法

package cn.Lucifer.oo;

import javax.jws.soap.SOAPBinding;

public class TestEquals {
   public static void main(String[] args) {
       Object obj;
       String str;

       //创建两个User对象
       User u1 = new User(21,"Lucifer","3123123");
       User u2 = new User(21,"Lucifer","12312123");

       System.out.println(u1 == u2); //地址不同,不同的对象
       System.out.println(u1.equals(u2));

       //创建两个String对象
       String str1 = new String("Lucifer");
       String str2 = new String("Lucifer");
       System.out.println(str1 == str2); //false,因为他们不是同一个对象
       System.out.println(str1.equals(str2)); //true,因为他们内容相同,虽然对象不同

  }
}

//定义一个新的类
class User{
   int id;
   String name;
   String pwd;

   public User(int id, String name, String pwd){
       super();
       this.id = id;
       this.name = name;
       this.pwd = pwd;
  }

   //hashCode的散列码
   @Override
   public int hashCode(){
       final int prime =31;
       int result = 1;
       result = prime * result + id;
       return result;
  }

   //重写equals方法
   @Override
   public boolean equals(Object obj){
       //根据id,id相同就认为是相同对象---id于Object obj进行判断
       //因为传递的时候是Object类型,所以要做一个强制转型
       if(this == obj) //obj是形参,this是指从写的"我"这个当前对象
           return true;
       if(obj == null) //如果传进来的obj形参是空,返回false
           return false;
       if(getClass() != obj.getClass()) //如果传进来的obj类型和"我"这个对象的类型不一样,也返回false
           return false;
       User other = (User) obj; //都符合,创建个对象将形参转型为User
       if(id != other.id) //如果id不相等则返回false
           return false;
       return true;
  }
   /*
   重写以后就会返回true,因为根据id判断
   概括:
   "=="是判断变量的对象是否是一个对象
   "equals"是判断变量的值是否相等
    */
}

 

 

It's a lonely road!!!
原文地址:https://www.cnblogs.com/JunkingBoy/p/14615165.html