equals和 == 的区别

news2024/11/14 18:44:05

1 问题

equals和 == 都可以对于值类型,然后比较代数值是否相等。那么equals和 == 的具体区别是什么?

2 方法

  1. == 是运算符,可以使用在基本数据类型变量和引用数据类型变量中,
    如果比较的是基本数据类型:

    比较的是两个变量保存额数据是否相等。


    如果比较的是引用数据类型:

    比较两个对象的地址值是否相同。

    即两个引用是否指向同一个对象实体。


    2c2a8a22557cce0357fff6ac4cfd44c8.png
    其运行结果是:


    true:

    基本数据类型不用看类型,因为有自动类型提升。


    false: 因为比较的是地址。


    148673f16b2fb31eddef96fe9be6ef90.png

    public class boke3a {
       public static void main(String[] args) {
           //基本数据类型举例
           int number1 = 65;
           float number2 = 65.0f;
           System.out.println(number1 == number2);
           //引用类型举例
           Student stu1 = new Student("jake",19);
           Student stu2 = new Student("jake",19);
           System.out.println(stu1 == stu2);
       }
    }
  2. equals()是一个方法,而非运算符,只能适用于引用数据类型。
    d8ca03594584dd2cf7de4a52237cb010.png
    其运行结果:

    由于stu1和stu2是两个对象,所以地址不一样,输出false是因为比较的是地址值。


    dc6dbd39434d7402f5c34b171b5430eb.png

    public class boke3b {
       public static void main(String[] args) {
           Student stu1 = new Student("jake",19);
           Student stu2 = new Student("jake",19);
           System.out.println(stu1.equals(stu2));
       }
    }
  3. 但在实际使用中,一般会重写定义equals方法,因为像String、Date、File、包装类等都重写了Object类中的equals()方法。

    重写后,比较的不是两个引用的地址值,而是比较两个对象的实体内容是否相同。

3 结语

== 比较基本数据类型时,比较的是数值;比较引用数据类型时,比较的是地址值。而equals比较的其实还是地址值。但是由于像String、Date、File、包装类等都重写了Object类中的equals方法。除了 String、Date、File、包装类等以外,若想使用equals比较对象的实体而非地址,就需要重写equals。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/141568.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

嵌入式实时操作系统的设计与开发(二)

加载应用程序与创建程序运行环境 将应用程序从Flash加载到RAM的实现代码是一定在启动代码中的。 计算机系统的运行其实是CPU到相应的内存地址去取回指令,然后译码并执行指令,再依次从下一个地址取指、执行,而程序就是指令与数据的集合。 程序…

JAVAWeb开发(基于分片的网络状态查询方法、装置及存储介质)

本文基于分片的网络状态查询方法、装置及存储介质已是申请的专利。本人为第一发明人,这里给出来是提供一种写专利的范本,仅供参考。专利申请号:CN202110346967.5正文部分:技术领域本申请涉及但不限于计算机网络数据传输一致性领域…

opencv--颜色物体追踪 图片的形态学处理函数

目录 一、主要函数介绍 1. cv2.erode() 2. cv2.dilate() 3. cv2.findContours() 4. cv2.circle() 5. cv2.line() 二、代码 这里首先确定是否安装imutils库,这个库能让调整大小或者翻转屏幕等基本任务更加容易实现。这一次主要应用的是对于图片的形态学处理函…

【Android春招】Android基础day1

一、填空题 1.Android是基于__ 的移动端开源操作系统。 Linux 2.Android系统是由__公司推出的。 谷歌 3.Android 11对应的API编号是__。 30 4.App除了在手机上运行,还能在电脑的__上运行。 模拟器(AVD&…

测试之概念篇【需求、测试用例、Bug描述、产品的生命周期、开发模型、测试模型】

文章目录1. 什么是需求2. 测试用例是什么3. Bug 是描述4. 产品的生命周期5. 软件测试贯穿于软件的整个生命,如何贯穿?6. 开发模型(瀑布模型、螺旋模型、增量模型和迭代模型、敏捷模型)7. 测试模型(V模型、W模型&#x…

【Java寒假打卡】Java基础-BigDecimal

【Java寒假打卡】Java基础-BigDecimal构造方法四则运算BigDecimal的特殊方法基本数据类型包装类自动装箱与自动拆箱Integer的类型转换将数字字符串进行拆分成整数数组构造方法 package com.hfut.edu.test1;import java.math.BigDecimal;public class test3 {public static void…

Crontab命令详解

crontab命令是Unix和Linux用于设置周期性被执行的指令,是互联网很常用的技术,很多任务都会设置在crontab循环执行。crontab命令可以精确到分(精确到秒的一般写脚本),相当于闹钟。 如果不使用crontab,那么任…

GD32F103-TIMER模块

定时器是一个功能强大的外设。 一般功能: 定时中断,计时器,给定一个时间,到达时间后产生一个中断定时器输出比较的功能,用于PWM波形的产生,驱动电机定时器输入捕获,测频率 核心关键参数&#…

基于Java+SpringBoot+vue+element实现新冠疫情物资管理系统详细设计

基于JavaSpringBootvueelement实现新冠疫情物资管理系统详细设计 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式 文章目录基于…

文件IO----(open、close、read、write、lseek)

1.文件IO 介绍:(系统IO、系统调用) POSIX(可移植操作系统接口)定义的一组函数,不提供缓冲机制,每次读写操作都引起系统调用,核心概念是文件描述符,访问各种文件类型,Lin…

Keychron 键盘指南

文章目录QQ1Q2Q3Q4Q5KK1K2k3 && k3proK3 VS K7k6 && K6prok7K8k10K12K14CVV1V2V3V4V5V6SQ Q1 Q1 是一款革命性的全金属键盘,每个开关、键帽、稳定器、旋钮甚至面板都具有可定制的功能。它专为个性化体验和卓越的打字舒适度而设计。 双垫片设计…

Cadence PCB仿真使用Allegro PCB SI配置仿真库的方法图文教程

⏪《上一篇》   🏡《总目录》   ⏩《下一篇》 目录 1,概述2,配置方法3,总结1,概述 本文简单介绍使用Allegro PCB SI软件选择需要仿真的网络的方法。 2,配置方法 第1步:打开待仿真的PCB文件,并确认软件为Allegro PCB SI 如果,打开软件不是Allegro PCB SI则可这样…

模型微调,低预算,高期望!

作为迁移学习中的常用技术,Fine-tuning(微调)已经成为了深度学习革命的重要部分。微调不需要针对新任务从头开始学习,只需要加载预训练模型的参数,然后利用新任务的数据进行一步训练模型即可。也可以说微调是对开放域任…

一文简单了解并部署Zookeeper集群

GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。作者:蟹黄瓜子文章来源:GreatSQL社区投稿 1.Zookeeper概述 Zookeeper对于很多人开始可能都有所耳闻&am…

基于Java+SpringBoot+vue+element实现爱心捐赠平台系统

基于JavaSpringBootvueelement实现爱心捐赠平台系统 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码…

排他思想的运用

思路简述 需求:桌子上有一排灯,点哪个亮哪个,但是要求每次只能点亮一盏。如果不使用排他思想,操作过程如下: 第一次打开一盏灯,记为 A,记录下来。第二次打开灯之前,先去找记录&…

[cpp进阶]C++智能指针

文章目录为什么需要智能指针?智能指针的原理及使用智能指针的原理智能指针的使用C中的智能指针C智能指针的发展历程std::auto_ptrstd::auto_ptr的使用std::auto_ptr的模拟实现std::unique_ptrstd::unique_ptr的使用std::unique_ptr的模拟实现std::shared_ptrstd::shared_ptr的…

Springboot @InitBinder处理from-data表单传参,指定参数默认新增前缀

前言 有兄弟突然找到我,江湖救急,我以为是啥问题呢? 一看这位小兄弟也是半路出家, 没有对springboot的常用注解有过研究。 不过没大碍,还是那句话, 学习的事情,只有先知和后知 现在你看完这篇…

纳米软件分享:光伏逆变器ATE测试系统,逆变器测试解决方案

光伏并网逆变器(以下简称“逆变器”)是光伏发电系统的核心部件之一,其主要功能是将光伏阵列的直流逆变为符合电网接入要求的交流电并入电网。并网逆变器ATE测试平台,主要是模拟光伏阵列特性输入的直流电源、模拟电网电源、系统控制…

Java垃圾分类查询管理系统源码+数据库,基于SpringBoot+mybatis-plus,垃圾分类查询及预约上门回收

垃圾分类查询管理系统 完整代码下载地址:Java垃圾分类查询管理系统源码数据库 1.介绍 垃圾分类查询管理系统,对不懂的垃圾进行查询进行分类并可以预约上门回收垃圾。 让用户自己分类垃圾, 按国家标准自己分类, 然后在网上提交订…