JAVA入门级教学之(Object类中的equals方法)

package com.lbj.javase18;
/**
 * 关于Object中的equals方法:
 * 
 * Object中的equals方法(核心):
 *  public boolean equals(o2){
 *     return(this==obj);//相当于return(o1==o2);中间跟的是双等号==,两边引用地址内存相同则true,不同则false
 *  }
 *  
 *  因此,Object中的equals方法比较的是两个引用的内存地址
 *  
 *  但是,java对象中的equals方法的设计目的:是判断两个对象是否一样
 * @author 14811
 *
 */
public class Test01 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Object o1=new Object();//因为所有类都默认继承Object类
        Object o2=new Object();
        
        boolean b1=o1.equals(o2);
        
        System.out.println(b1);//false
        
        //例2
        Star s1=new Star(100,"张三");
        Star s2=new Star(100,"张三");
        Star s3=new Star(111,"张三");
        
        System.out.println(s1.equals(s2));//false,同时,这里面调用的是当前对象的equals,所以要在当前对象的类中进行重写
        //但是实际结果我们不想看到这种情况的发生,因为id号相同就代表是同一个人的意思
        //所以Object中的equals方法也要重写
        //再一次编译后就是true了
        System.out.println(s2.equals(s3));//false,id号不一致
        
    
        
    }

}

//例2
class Star{//默认继承object类
    
    int id;
    String name;
    
    //构造方法
    public Star(int id,String name){
        this.id=id;
        this.name=name;
    }
    
    //开始重写,到API帮助文档进行复制重写
    //需求规定:如果身份证号一致,并且名字也一致,则代表同一个人
    //s1.equals(s2);
    //相当于 this 和 obj 之间的参数传递比较
    public boolean equals(Object obj){//父类型引用指向子类型对象,如果父类型想调用子类型,需要进行强制转换
        //int id1=this.id;//这个this.id之所以成立是因为在这个类里面this代表的是Star,因此this包涵有id这个属性
        //int id2=obj.id;报错,因为obj里面没有id这个属性
        //改正
        //先强制类型转换
        //Star s=(Star)obj;
        //int id2=s.id;
        
        //这里比较内存地址是否相同
        if(this==obj)return true;//如果内存地址相同的话,equals也成立的意思
        
        //这里比较内容是否相同
        if(obj instanceof Star){//如果obj是Star
             Star s=(Star)obj;//强转为同一个类型
             if(s.id==this.id&&s.name.equals(name)){//左边的equals是调用String类型里面重写的,比较的是字符串,不是内存地址了             
              return true;
          }
        }
        return false;
        //在java中比较两个字符串是否一致,不能用"==",只能调用String类的equals方法
        
    }
    
    
}


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值