对象比较:"==" "equals()" "hashCode()"

1.对象和对象引用

 对象:这里指对象实例,其实就是一段内存空间,在new Object()时分配.

 对象引用: 对象引用,其本省不是对象,而是对象实例的引用(可理解为指向对象实内存地址指针)

   假设现有类Apple,有id,name两个属性

   Apple a=new Apple();

   这里 a  只是对象引用,也就是对象引用型变量,它可以引用Apple及其子类的对象实例。

   new Apple()分配的那段地址空间,才是真正的对象,其它都是对它的引用而已

  2,"=="  和 "equals"

   Apple a=new Apple();

   a.setId(9527);

   Apple b=new  Apple();

   b.setId(9527)

   Apple c=b;

  a==b: 就是比较a,b两个引用(a,b不是对象实例),是否引用同一个对象实例,(可理解为是否指向同一段内存空间),因此有以下结论:  a==b,fasle                b==c  :true

  a.equals(b),分两种情况

   如果类Apple没有重写继承自Object基类的equals方法,那么和 "=="一样,比较是否引用同一个对象实例。

  如果重写了equals方法,就要按照Apple类 equals方法的实现逻辑比较了,当然,常规的做法是,重写equals方法,让它判断a,b的值是否相等,下面给一个equals()方法参照实现

  public boolean equals(Object o){
      
if (o instanceof  Apple) {
             Apple apple = (Apple ) o;
             return ((this.id == o.getId));
        }
        return false;

}

 

这里只比较了Apple的Id属性,你也可比较Apple的所有属性是否相等,不过一般只比较唯一属性,就可确定两个实例的值是否相等了。

   注意:sun jdk的很多类,其实已经重写过equals()方法了,比如String,Double,等等。。。

 

3.hashCode()

 建议:如果两个对象实例调用equals()方法比较是相等的,则这两个对象实例的hashCode()方法必须返回相同的整数。否则使用HashMap,Set等时会有问题。

  下面给个参考实现

    public int hasCode() {
        return new java.lang.Integer(sunr).hashCode();

    }

总结:我们自己写的新类,如果需要比较是否相等(值相等),那么就需要重写equals()方法,比较唯一属性是否相等即可.还需要重写hashCode()方法。

 
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.m或d论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值