==、equals、hashcode

==和equals区别

  • ==用于基本数据类型,比较的是值,用于引用类型,比较的是对象的内存地址。
  • java中只有值传递,因此对于引用类型,实际比较的引用的内存地址的值。
  • equals不能用来判断基本数据类型,只能判断引用数据类型,判断两个对象是否相等。
java 复制代码
String a = new String("ab"); // a 为一个引用
String b = new String("ab"); // b为另一个引用,对象的内容一样
String aa = "ab"; // 放在常量池中
String bb = "ab"; // 从常量池中查找
System.out.println(aa == bb);// true
System.out.println(a == b);// false
System.out.println(a.equals(b));// true
System.out.println(42 == 42.0);// true

hashcode

  • 把输入的值经过哈希算法得出哈希码,即散列码,用来确定对象在哈希表的索引位置。
  • hashCode() 定义在 JDK 的 Object 类中,这就意味着 Java 中的任何类都包含有 hashCode() 函数。另外需要注意的是:ObjecthashCode() 方法是本地方法,也就是用 C 语言或 C++ 实现的。

为什么JDK同时提供hashCode()equals()方法

hashCode()equals()都是用于比较两个对象是否相等。

  • 为什么 JDK 还要同时提供这两个方法呢?
    这是因为在一些容器(比如 HashMapHashSet)中,有了 hashCode() 之后,判断元素是否在对应容器中的效率会更高(参考添加元素进HashSet的过程)!
    我们在前面也提到了添加元素进HashSet的过程,如果 HashSet 在对比的时候,同样的 hashCode 有多个对象,它会继续使用 equals() 来判断是否真的相同。也就是说 hashCode 帮助我们大大缩小了查找成本。
  • 为什么不只提供 hashCode() 方法呢?
    这是因为两个对象的hashCode 值相等并不代表两个对象就相等。
  • 那为什么两个对象有相同的 hashCode 值,它们也不一定是相等的?
    因为 hashCode() 所使用的哈希算法也许刚好会让多个对象传回相同的哈希值。越糟糕的哈希算法越容易碰撞,但这也与数据值域分布的特性有关(所谓哈希碰撞也就是指的是不同的对象得到相同的 hashCode )。
相关推荐
Z...........2 分钟前
Spring日志管理
java·后端·spring
lj850862 分钟前
性能测试总结
java·开发语言·spring
yhdata6 分钟前
自然灾害检测物联网系统市场稳步扩容:2032年规模剑指392.7亿元,六年CAGR达33.8%
java·物联网·struts
小锅锅氩8 分钟前
JavaDay01
java·ide·intellij-idea
smxgn11 分钟前
Springboot 整合 Quartz(定时任务框架)
java·spring boot·后端
C雨后彩虹13 分钟前
最小矩阵宽度
java·数据结构·算法·华为·面试
难忘经典14 分钟前
Java进阶(ElasticSearch的安装与使用)
java·elasticsearch·jenkins
liuyao_xianhui15 分钟前
动态规划_最长递增子序列_C++
java·开发语言·数据结构·c++·算法·链表·动态规划
程序员爱酸奶19 分钟前
Java常用设计模式
java·开发语言·设计模式
Javatutouhouduan21 分钟前
Java工作多久后才需要深入学习JVM底层原理?
java·jvm·java面试·java程序员·互联网大厂·jvm底层原理·jvm面试