Java 中 Equals和==的区别

2023-05-16

在谈论equals和==的区别前,我们先简单介绍一下JVM中内存分配的问题。

在JVM中 内存分为栈内存和堆内存。二者有什么区别呢?

当我们创建一个对象(new Object)时,就会调用它的构造函数来开辟空间,将对象数据存储到堆内存中,与此同时在栈内存中生成对应的引用,当我们在后续代码中调用的时候用的都是栈内存中的引用,还需注意的一点,基本数据类型是存储在栈内存中。有了一定的了解 我们来看Equals和==的区别。



首先equals和== 最大的区别是一个是方法一个是运算符,在Java中,二者比较的都是物理地址 而不是值得比较。

我们举个例子这样比较直观。

Student student1 = new Student();

Student student2 = new Student();

System.out.println(student1.equals(student2));

System.out.println(student1 == student2);

不论是用的是哪一种方法 , 最终的结果显示的都是false,大家不妨可以试一下。为什么呢?就是因为他们比较的不是对象中字段的值或者说本身对象的值,而比较的是物理地址。

我们再来举一个例子。

String a = new String("a");

String b = new String("a");

System.out.println(a == b);

System.out.println(a.equals(b));

当我们创建2个String对象是 我们会发现 执行的结果是 false true。为什么这次euqals返回的值编程了true?因为此时equals方法不单单是比较物理地址 同时也比较了值,

在String中 equals方法被重写 当物理地址不同时,会进一步比较值,代码如下:

if(object instanceof String){}

那么问题来了 当我调用

System.out.println(student1.toString().equals(student2.toString()));时,结果又是怎样的?

结果却返回了false.为什么呢?这就牵扯到了hashcode的问题。

那么为了保证两个对象比较值相等有什么办法么?想必大家都试过重写equals方法,而最终的结果都不如人意。为什么?因为单单重写equals方法并不能改变hashcode值,在java中 首先比较的就是hashcode。那么如何结果这个问题?

大家可以尝试 右键->source->generate hashcode() and equals() 来实现。


在下还是个菜鸟  第一次写 , 也有许多不足,写的不好的地方大家可以提,写错的地方大家可以纠正。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 中 Equals和==的区别 的相关文章

随机推荐

  • 面试题集锦-javaWeb

    javaWeb 1 JSP 和 servlet 有什么区别 xff1f 2 JSP 有哪些内置对象 xff1f 作用分别是什么 xff1f 3 说一下 JSP 的 4 种作用域 xff1f 4 session 和 cookie 有什么区别
  • 面试题集锦-网络

    目录 1 http 响应码2 forward 和 redirect 的区别 xff1f 3 简述 tcp 和 udp的区别 xff1f 4 说一下 tcp 粘包是怎么产生的 xff1f 5 OSI 的七层模型都有哪些 xff1f 6 get
  • 面试题集锦-设计模式

    设计模式 1 说一下你熟悉的设计模式 xff1f 2 简单工厂和抽象工厂有什么区别 xff1f 1 说一下你熟悉的设计模式 xff1f 单例模式 xff1a 保证被创建一次 xff0c 节省系统开销 工厂模式 xff08 简单工厂 抽象工厂
  • 服务器配置ssh(centos7)

    服务器配置 centos7 span class hljs title vim etc ssh sshd config span span class hljs comment br 禁用root账户登录 xff0c 如果是用root用户登
  • 面试题集锦-Spring/SpringMVC

    Spring SpringMVC 1 为什么要使用 spring xff1f 2 解释一下什么是 aop xff1f 3 解释一下什么是 ioc xff1f 4 spring 有哪些主要模块 xff1f 5 spring 常用的注入方式有哪
  • 面试题集锦-SpringBoot

    spring boot 1 什么是 spring boot xff1f 2 为什么要用 spring boot xff1f 3 spring boot 核心配置文件是什么 xff1f 4 spring boot 配置文件有哪几种类型 xff
  • 面试题集锦-hibernate

    hibernate 1 什么是 ORM 框架 xff1f 2 为什么要使用 hibernate xff1f 3 hibernate 中如何在控制台查看打印的 SQL 语句 xff1f 4 hibernate 有几种查询方式 xff1f 5
  • 面试题集锦- spring cloud

    spring cloud 1 什么是 spring cloud xff1f 2 spring cloud 断路器的作用是什么 xff1f 3 spring cloud 的核心组件有哪些 xff1f 1 什么是 spring cloud xf
  • 面试题集锦-Mybatis

    Mybatis 1 MyBatis 中 和 的区别是什么 xff1f 2 MyBatis 有几种分页方式 xff1f 3 RowBounds 是一次性查询全部结果吗 xff1f 为什么 xff1f 4 MyBatis 逻辑分页和物理分页的区
  • 面试题集锦-RabbitMQ

    RabbitMQ 1 RabbitMQ 的使用场景有哪些 xff1f 2 RabbitMQ 有哪些重要的角色 xff1f 3 RabbitMQ 有哪些重要的组件 xff1f 4 RabbitMQ 中 vhost 的作用是什么 xff1f 5
  • 面试题集锦-kafka

    kafka 1 kafka 可以脱离 zookeeper 单独使用吗 xff1f 为什么 xff1f 2 kafka 有几种数据保留的策略 xff1f 3 kafka 同时设置了 7 天和 10G 清除数据 xff0c 到第五天的时候消息达
  • 面试题集锦-Zookeeper

    Zookeeper 1 zookeeper 是什么 xff1f 2 zookeeper 都有哪些功能 xff1f 3 zookeeper 有几种部署模式 xff1f 4 zookeeper 怎么保证主从节点的状态同步 xff1f 5 集群中
  • 面试题集锦-MySQL

    MySQL 模式主备切换方式方式 主从概述原理主节点从节点 方式 读写分离分库分表索引页页目录目录页B 43 树聚簇索引和非聚簇索引为什么InnoDB只有一个聚簇索引 xff0c 而不将所有索引都使用聚簇索引 xff1f 联合索引的最左前缀
  • 面试题集锦-Redis

    Redis 1 Redis 是什么 xff1f 都有哪些使用场景 xff1f 2 Redis 和 memcache 有什么区别 xff1f 3 Redis 为什么是单线程的 xff1f 4 什么是缓存穿透 xff1f 怎么解决 xff1f
  • Ubuntu18.04 qt5.14安装

    1 下载qt5 14 2 链接Index of archive qt 2 安装 打开终端 xff0c 进入安装包目录 xff0c 给安装包rwx权限 chmod 777 qt opensource linux x64 5 14 2 run
  • 面试题集锦-JVM

    JVM 1 说一下 JVM 的主要组成部分 xff1f 及其作用 xff1f 2 说一下 JVM 运行时数据区 xff1f 3 说一下堆栈的区别 xff1f 4 队列和栈是什么 xff1f 有什么区别 xff1f 5 什么是双亲委派模型 x
  • eclipse快捷键

    ctrl 43 t 查看接口实现类 ctrl 43 shif 43 t 快速查找某个类 包括jar中类 ctrl 43 shift 43 r 快速查找工作空间中项目的类
  • short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?

    答 xff1a 对于short s1 61 1 s1 61 s1 43 1 由于1是int类型 xff0c 因此s1 43 1运算结果也是int 型 xff0c 需要强制转换类型才能赋值给short型 而short s1 61 1 s1 4
  • int和Integer有什么区别

    答 xff1a Java是一个近乎纯洁的面向对象编程语言 xff0c 但是为了编程的方便还是引入了基本数据类型 xff0c 但是为了能够将这些基本数据类型当成对象操作 xff0c Java为每一个基本数据类型都引入了对应的包装类型 xff0
  • Java 中 Equals和==的区别

    在谈论equals和 61 61 的区别前 xff0c 我们先简单介绍一下JVM中内存分配的问题 在JVM中 内存分为栈内存和堆内存 二者有什么区别呢 xff1f 当我们创建一个对象 xff08 new Object xff09 时 xff