Java中的==和equals

简单总结为:

1、“==”:代表比较双方是否相同。如果是基本数据类型则表示相等,如果是引用数据类型则表示地址相等即是同一个对象。

public class TestEquals {
    public static void main(String[] args){
        User u1 = new User(2018,"小红","12345");
        User u2 = new User(2018,"小明","12345");
        System.out.println(u1==u2);
        User u3 = u1;
        System.out.println(u1==u3);
    }
}
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;
    }
}
//output:
//false
//true

2、equals:Object类中定义的public booiean equals(Object obj)方法,提供定义”对像内容相等“的逻辑。

(1)Object类中,equals方法也是基于“==”定义,原码如下,

    public boolean equals(Object obj) {
        return (this == obj);
    }

 如果子类不改写equals方法,则也只能用于判断基本数据类型是否相同或者判断引用数据类型的地址是否相同(即是否为同一对象)。

(2)大多数类都会对equals方法进行重写,达到的目的是:用于判断两个对象(地址不同)的内容是否一样,例如String类,原码如下:

public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String aString = (String)anObject;
            if (coder() == aString.coder()) {
                return isLatin1() ? StringLatin1.equals(value, aString.value)
                                  : StringUTF16.equals(value, aString.value);
            }
        }
        return false;
    }

String类的equals方法达到的效果是,同一个对象(即相同地址)返回true、 同一个类产生的不同对象,两个对象的内容一样也返回true。

即equals方法主要增加了“判断内容是否相同”这一环节。

补充举例:改写equals方法,如下:

public class TestEquals {
     public static void main(String[] args){
         User u1 = new User(2018,"小红","12345");
         User u2 = new User(2018,"小明","12345");
         User u3 = new User(2019,"小亮","12345");
         System.out.println(u1==u2);
         System.out.println(u1.equals(u2));
         System.out.println(u1.equals(u3));
     }
 }
 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;
     }
 
     public boolean equals(Object obj){
         if (this == obj){
             return true;
         }
         if (obj instanceof User){
             User u = (User)obj;
             if (this.id==u.id){  //判断的内容仅仅是id属性  
                 return true;
             }
         }
         return false;
     }
 }
 /*output:
 false
 true
 false
 */

转载于:https://www.cnblogs.com/pxb2018/p/10519169.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值