Java中“==”与equals()方法的区别

equals(Object) 与 == 的区别 立即下载

一、基本概念区分

  1. 对于“==”,比较的是值是否相等

    如果作用于基本数据类型,比较的是存储的值是否相等。
    如果作用于引用数据类型,比较的是所指向的对象的地址是否相同。

    其实“==”比较的不管是基本数据类型还是引用数据类型,比较的都是值,只是引用类型变量存的值是对象的地址
    
  2. 对于"equals()",比较的是对象是否相同
    1)equals()方法不能作用于基本数据类型,只能作用于引用数据类型
    2)Object类中equals()的源码

    public boolean equals(Object obj){
    	return (this == obj);
    }
    

    由此看出,Object类中定义的equals()方法和“==”的作用是相同的:比较两个对象的地址值是否相同,即两个引用是否指向同一个对象实体
    3)像String、Date、File、包装类等都重写了Object类中的equals()方法。重写以后,比较的不是两个引用的地址是否相同,而是比较两个对象的“实体对象”是否相同。
    String类中equals()的源码

    public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }
    

    4)如果是我们自定义的类使用equals()方法的话,如果不重写equals()方法,调用的就是Object类中的equals()方法,作用等同于“==”,而我们通常是比较两个对象的“实体内容”是否相同,所以就需要对Object类中的equals()方法进行重写。

二、使用示例

  1. 示例一

    代码如下:

    int x = 10;
    int y = 10;
    String str1 = new String("abc");
    String str2 = new String("abc");
    System.out.println(x == y);	//true
    System.out.println(str1 == str2);	//false
    System.out.println(str1.equals(str2));	//true
    
  2. 示例二
    代码如下:

    String str3 = "abc";
    String str4 = "abc";
    System.out.println(str3 == str4);	//true
    

    这里的str3和str4相等的原因是这里运用到了常量池,当运行到str3创建字符串时,当常量池中没有时,就在常量池中新建一个字符串“abc”,并把引用返回给str3;而当str4创建字符串的时候,常量池中已经有了一模一样的字符串,就直接使用,因此str1和str2都指向相同的引用。

    String类型的常量池中同一时间只会存在一个内容一样的字符串,所以这也就保证了唯一性。
    
  3. 示例三
    代码如下:

    先定义一个User类

    public class User{
    	private int age;
    	
    	public User(int age){
    		this.age == age;
    	}
    }
    

    然后创建两个User实例来比较(运行结果为false)

    User u1 = new User();
    User u2 = new User();
    
    system.out.println(u1.equals(u2));	//false
    

    此时的equals()方法调用的是Object类中的equals()方法,等同于“==”,所以返回false。
    然后我们在User类中重写equals()方法,意味着:只要年龄相同,我们认为就是同一个用户。(这是系统生成的重写的equals()方法)

    @@Override
    public boolean equals(Object obj) {
    	if (this == obj)
    		return true;
    	if (obj == null)
    		return false;
    	if (getClass() != obj.getClass())
    		return false;
    	User other = (User) obj;
    	if (age != other.age)
    		return false;
    	return true;
    }
    

    此时,重新运行刚才的代码(运行结果变成了true)

    User u1 = new User();
    User u2 = new User();
    
    system.out.println(u1.equals(u2));	//true
    

总结

这是我的第一个博客,模仿着做,过程有点艰难,但是写完之后感觉特别有成就感。希望以后有时间还能写博客,虽然我有点懒,但我还是想要坚持做下去,努力尝试一下把。

Codex智能体从零搭建:环境配置、代码管理与MCP扩展实战 AI智能体(Agent)作为连接大语言模型与实际应用的关键技术,通过感知、决策与执行框架,将AI能力融入具体工作流。其核心原理在于利用提示工程、上下文管理与工具调用,将自然语言指令转化为可执行操作。在软件开发领域,AI智能体能够显著提升代码生成、项目管理和自动化任务的效率。通过Model Context Protocol(MCP)等标准化协议,智能体可以安全、结构化地集成外部工具与服务,实现能力扩展。本文聚焦于Codex这一AI驱动的代码助手平台,详细解析其环境配置、代码索引、记忆系统等核心模块,并深入探讨 阅读详情

相关推荐

一觉醒后ChatGPT 被淘汰了

近日,AI 界貌似出现了一种新的趋势:自主人工智能。这不是空穴来风,最近一个名为 AutoGPT 的研究开始走进大众视野。特斯拉前 AI 总监、刚刚回归 OpenAI 的 Andrej Karpathy 也为其大力宣传,并在推特赞扬:「AutoGPT 是 prompt 工程的下一个前沿。」

Rocky006的博客 13万+

面试题—————— equals和== 的区别

面试官:说说equals和== 的区别? 对于 == 来说: 如果比较的是基本数据类型变量,比较两个变量的值是否相等。(不一定数据类型相同) 如果比较的是引用数据类型变量,比较两个对象的地址值是否相同,即两个引用是否指向同一个对象实体。 测试基本数据类型: int a = 20; int a = 20; double c = 20.0; char i = 20; char j = 'A'; boolean boo = tru

趁年轻不如拼一拼 2万+

STC32G电调调试血泪史:从TPH1R403NL MOS管烧毁到PWM信号异常排查全记录

本文详细记录了STC32G无刷电调调试过程中的常见问题与解决方案,包括MOS管烧毁、PWM信号异常等关键故障排查。通过电源系统检测、驱动电路验证及三相平衡调试等实战经验,帮助硬件爱好者快速定位问题,提升电调调试效率。特别针对TPH1R403NL等MOS管的保护措施进行了重点分析。

weixin_33736048的博客 551

HashSet如何检查重复?

当把对象加入HashSet的时候,HashSet会先计算对象的hashCode值来判断对象加入的位置,同时与其他加入的对象的hashcode值作比较,如果没有相同的,则加入该对象,如果有相同的hashcode值,则调用equals方法判断是不是同一个对象,如果不是则加入;如果相同,则加入不成功; ...

qq_38197844的博客 359

BrainVision Recorder 和 BrainVision Analyzer 2.2 安装

本篇为《EEG处理》系列博客的第二篇,该系列博客主要记录EEG信号处理的学习过程中的软件安装和学习过程,方便以后查阅。本篇为BrainVision Recorder 和 BrainVision Analyzer 2.2 的安装过程。 BrainVision Recorder 和 BrainVision Analyzer 2.2 安装安装前奏Brain Vision Analyzer分析软件 安装Brain Vision Recorder记录软件 安装推荐几款个人使用的科研软件 安装前奏 Brain V

梁小憨憨的博客 5060

基于任务的功能磁共振成像的连接性分析

虽然这种方法通过减少偶然只选择特异性代表的可能性来改善可推广性,但类别内和类别间的变异性变得更难控制(例如,"鸟类"可能是一个比"车辆"更加/不那么同质的类别),并且可能会出现关于这些预定义类别是否是现实世界实体的有意义划分的担忧——尽管这个限制在某种程度上可以通过表征相似性分析来解决。特别是,海马单变量激活和语义认知区域(左下额回)中语义信息的表征强度之间的交互预测了项目的概念记忆,而海马单变量激活和视觉处理区域(腹内侧枕叶皮层)中视觉属性的表征强度之间的交互预测了图像样本的知觉记忆。

cc1609130201的博客 2229

== 和 equals 的区别是什么?

java中equals和==的区别

qq_45768734的博客 1756

打造AI智能体员工,我用扣子复刻了华与华、奥美和金枪大叔

这事说穿了,就是你用多个AI智能体,分别扮演专业角色,构成一支能力互补、各司其职的“数字团队”。每个智能体,都有明确的角色设定、任务边界和接口形式。它不再是一个泛泛的ChatGPT,而是你手下的“品牌顾问”、“策略专家”、“文案大神”、“短视频导演”、“运营总监”。简单来说,你不再是雇一个人,而是养一群机器人打工——24小时不摸鱼,不请假,不离职。如果你是个人创业者、内容创作者、培训机构、中小企业主,其实都可以尝试构建属于你自己的“AI虚拟员工矩阵”。

互联网架构师笔记 1498

java中==和euqals的区别

个人对==和equals方法不同的理解

dongyiab的博客 262

“EXB文件的格式和编程“

首先,打开文件并读取文件头,然后解析文件头中的元数据信息。接下来,循环读取数据块,每次读取块头部分,解析块的大小和类型,并读取相应大小的块数据。文件头(Header):EXB文件通常包含一个文件头,用于存储关于文件的元数据信息。读取EXB文件时,首先需要解析文件头,以了解文件的属性和数据结构。总结起来,EXB文件是一种常见的二进制数据文件格式,在编程中处理EXB文件需要了解其基本结构和元数据信息。通过以上代码,您可以根据自己的需求扩展处理其他类型的数据块,或者根据EXB文件的具体规范进行解析和处理。

HackCyberX的博客 1532

工业级实战:C#上位机集成YOLO实现多目标跟踪(含数据库存储+报表导出)

推理核心:ONNX Runtime实现C#直接推理YOLO模型,GPU优先+CPU降级适配工业机;跟踪核心:SORT算法轻量级实现多目标跟踪,保证工业场景实时性与稳定性;数据核心:MySQL存储+本地缓存,Excel报表标准化导出,满足工业数据追溯与质检需求;部署核心:模型优化、GPU加速、开机自启,保证工业级7x24小时运行。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 474

== 和equery的区别究竟是什么呢

前言 2020/11/23,正在加班的我想要去专研一下面试题,为了能给自己动力所以就突然想要写博客取记录自己的成长,然后成为一条咸鱼专心追热巴!!! 第一个面试题是什么呢? == 和equals的区别(一个基础题,送上拙见) 先来看一下其余大佬写的一些理解 1、== : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象。(基本数据类型 == 比较的是值,引用数据类型 == 比较的是内存地址) 2、equals() : 它的作用也是判断两个对象是否相等。但它一般有两种使用情况: 情况1

weixin_44994494的博客 1153

STM32N6570-DK识别STLINK问题,如何解决?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 2209

java中 equals()方法 与 “==”的区别

原文链接 摘要 java语言的 equals() 方法 与 “==” 的区别,是每个初学者都会遇到过的问题。之前自己也很清楚,可日子一长,又渐渐遗忘,于是整理出一篇博客,复习一下。 1. 基本数据类型 java的基本数据类型,也称为原始的数据类型。它们分别是: byte, short, char, int, long, float, double, boolean . 基本数据类型进行 “==” ...

jamieblue1的博客 215

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

“==”算数运算符与equals()方法的区别 java

1.“==”算数运算符 1.首先==是算数运算符

qq_45256805的博客 587

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Java中的equals()方法以及与"=="的区别

一、问题描述: Java中,关于比较两个字符串是否相等的问题,经常会出现。今天在用Java实现需求的时候,发现equals()和“==”的功能有点分不清,导致结果产生巨大的偏差。所以,我决定花点时间把equals()和“==”的功能彻底给弄懂。 二、分析探索解决问题的方法: 1、Object 中的equals()方法: (1)通过查找API,说明如下: equals public bo...

weixin_44255799的博客 1738

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

彻底弄懂Java中的equals()方法以及与"=="的区别

一、问题描述: 今天在用Java实现需求的时候,发现equals()和“==”的功能傻傻分不清,导致结果产生巨大的偏差。所以,我决定花费时间把equals()和“==”的功能彻底弄懂,前事不忘后事之师嘛,分享给大家,希望对大家理解equals()和“==”的功能有所帮助。 二、分析探索解决问题的方法: 1、Object 中的equals()方法: (1)通过查找API,说明如下:

G_66_hero的博客 2万+

Java中"=="与equals()方法的区别

1.  操作符”==”用来比较两个操作元是否相等,这两个操作元既可以是基本类型,也可以是引用类型。例如:int a1=1,a2=3;      boolean b1=a1==a2; //”==”的操作元为基本类型,b1值为false      String str1=”Hello”,str2=”World”;      boolean b2=str1==str2; //”==”的操

1683

Java中 equals() 方法与“==”区别

1.“==” “==”比较的是值是否相等(对于基本数据类型而言,比较的就是存放数据的大小;对于引用类型而言,比较的是存放的地址是否相等) /* == */ class Person { private String name; private int age; public Person(String name, int age) { this.age ...

学习笔记。 168

java对象“==”与equals()方法的区别

private Deque<Integer> data; private Deque<Integer> helper; ... if(helper.peek()==data.peek()){ ... } 在一次编程中发现两个栈的栈顶元素打印是相等的,但是却进入不了if语句。后来发现是因为java中自动装箱自动拆箱在基本类型int和对象类型Integer之间转换,在hel...

weijifen000的博客 255

Java中equals()方法与"=="的区别

概述Java中equals()方法和”==”的用法在求职中经常遇到,学习之后时间长了容易忘记,所以整理一下学习笔记以便日后复习。若有不对,欢迎指正,大家相互学习。使用“==”时,当时基本数据类型比较时,比较它们存储的值是否相等。当比较引用类型时,比较引用变量所指向的对象地址是否相等。 使用equals() 方法时,但equals方法不能作用于基本数据类型。

struggledhard的博客 366

【转】彻底弄懂Java中的equals()方法以及与"=="的区别

彻底弄懂Java中的equals()方法以及与"=="的区别 一、问题描述:今天在用Java实现需求的时候,发现equals()和“==”的功能傻傻分不清,导致结果产生巨大的偏差。所以,我决定花费时间把equals()和“==”的功能彻底弄懂,前事不忘后事之师嘛,分享给大家,希望对大家理解equals()和“==”的功能有所帮助。 二、分析探索解决问题的方法:1、Object 中的equals...

weixin_33882443的博客 185

java中“==”与equals()方法区别

“==”和equals方法区别: 双等号“ == ”,对于基本数据类型,比较的是它们的值。 对于非基本类型,比较的是它们在内存中的存放地址,或者说是比较两个引用是否引用内存中的同一个对象。 equals方法没有在类中被override时,比较的还是对象在内存中的地址;如果被override,一般是比较对象中的成员是否相同。 Integer a = new Integer(1); Integer b = new Integer(1); System.out.println(

weixin_42785235的博客 363

JAVA中“==”与equals()方法区别

equals 方法是 java.lang.Object 类的方法 有两种用法说明: (1)对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。 “==”比较两个变量本身的值,即两个对象在内存中的首地址。 “equals()”比较字符串中所包含的内容是否相同。 比如: String s1,s2,s3 = "abc", s4 ="abc" ; s1 =

无羁之风的专栏 598
下一篇: JVM、JDK、JRE三者的关系
一杯-冰可乐
博客等级 码龄6年 1粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值