==、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 )。
相关推荐
超级小忍1 分钟前
JVM 中的垃圾回收算法及垃圾回收器详解
java·jvm
weixin_446122464 分钟前
JAVA内存区域划分
java·开发语言·redis
勤奋的小王同学~31 分钟前
(javaEE初阶)计算机是如何组成的:CPU基本工作流程 CPU介绍 CPU执行指令的流程 寄存器 程序 进程 进程控制块 线程 线程的执行
java·java-ee
TT哇33 分钟前
JavaEE==网站开发
java·redis·java-ee
2401_8260976237 分钟前
JavaEE-Linux环境部署
java·linux·java-ee
缘来是庄1 小时前
设计模式之访问者模式
java·设计模式·访问者模式
Bug退退退1232 小时前
RabbitMQ 高级特性之死信队列
java·分布式·spring·rabbitmq
梵高的代码色盘2 小时前
后端树形结构
java
代码的奴隶(艾伦·耶格尔)2 小时前
后端快捷代码
java·开发语言
虾条_花吹雪2 小时前
Chat Model API
java