dabocaiqq
dabocaiqq
2020-05-10 12:11
采纳率: 66.6%
浏览 154

Java语言高分悬赏:请问==和equals的区别和联系是什么,hashcode有什么用

Java语言高分悬赏:请问==和equals的区别和联系是什么,hashcode有什么用

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • wojiushiwo945you
    毕小宝 2020-05-10 16:23
    已采纳
    == 是简单的比较,针对指针比较的是地址;
    equals 是按一定的业务逻辑比较的,比如字符串的 equals 比较各个字符相等;
    hashCode 是返回对象的哈希码,一般可以理解为对象在内存中的地址;== 操作多是比较这个 hashCode 的。
    
    点赞 评论
  • x060508
    x060508 2020-05-10 16:42

    == 引用类型比较的是对象的地址 基本数据类型比较的是数值

    equals 是Object里的方法 要是没有重写这个方法的话那默认就是跟== 等效比较地址的

    hashCode一般是依据对象里的成员属性按照一定的hash函数之后得到的一个值

    两个对象 equals相等 hashcode必然就相等

    hashcode相等 equals未必就会等价

    点赞 评论
  • m0_46321529
    编程和音乐万一呢 2020-05-23 14:34

    ==:
    对于java中的基本类型(byte、short、int、long、flow、double、boolean、char)是对比 == 前后的值,若相等则返回true,否则返回false;
    对于其他类型(引用类型)则只比较他们的地址值,同样,若相等则返回true,否则返回false;
    equals(Object obj):
    1.先说对于父类的equals方法,它会先比较this和obj是否是同一个对象(使用==比较),若相等,则直接返回ture;
    2.举一个例子(String类重写的equals方法):
    2.1 equals(Object anObject):
    2.1.1 首先,同样会有比较this和anObject是否是同一个对象(使用==比较,由于是object对象,所以对比的是内存地址)的逻辑,若相等,则直接返回ture;
    2.1.2 然后又会使用(anObject instanceof String)去判断anObject的类型是否为String(补充instanceof的作用:判断关键字前面的对象与关键字后面对象的是其直接或间接子类,或者是其接口的实现类,可由于String是final类,所以在这里只能是String类),若不是String类则直接返回false;
    2.1.3 若判断为String类,则对anObject进行强制类型转换(String)anObject,然后比较两个String的char数组(补充String与char[]的关系:java中的String类在声明的时候会在String实例内维持一个char类型的value[],用于存放该String的值)的长度(value.length),若两者长度不想等则直接返回false;
    2.1.4 若两者的长度(value.length)相等,则进行倒序遍历比较两个String的值(char类型数组的value)逐个比较,只要其中任意位置的值不想等则返回false;
    2.1.5 最终,所有位置的值都能一一对应则返回true。
    3.其他类或者自己写的的equals有各自的逻辑
    至于hashCode()方法作用,其实就是返回一个对象的引用地址。

    点赞 评论

相关推荐