Java基础知识:==和equals的区别

详解“==”和equals的区别 详解“==”和equals的区别一、“==”二、equals()三、栗子和解释说明3.1栗子3.2基本数据类型的比较3.3引用数据类型的比较3.3.1String类3.3.2未重写equals方法的类四、练手栗子 “==”和equals 最大的区别是 “==”是运算符,如果是基本数据类型,则比较存储的值;如果是引用数据类型,则比较所指向对象的地址值。 equals是Object的方法,比较的是所指向的对象的地址值,一般情况下,重写之后比较的是对象的值。 一、“==” “==”是运算符 ①如果比较的对象是 阅读详情

无论是在面试或者在工作中,==和equals是我们始终无法避免的两个基本使用,但是,==和equals又是不同的,一旦用错了,那么程序就会出现错误,但是排查的时候又很难发现。

我们都知道,Java中有8种基本的数据类型,分别是:Byte,short,int,long,double,folat,boolean,char,其中占一个字节的是byte,short和char占两个字节,int,float占四个字节,double和long占8个字节,boolean只有true和false,这八种数据变量中直接存储数据的值。另外,这8种基本数据类型对应着各自的封装类型,提供了更多的方法,且不进行初始化时值默认为空(基本数据类型必须初始化)。

除此之外,java中还存在着引用数据类型,我们常使用的String就是一种引用类型。

==比较时的作用

简单点说:基础数据类型:==比较的是他们的值是否相等,比如两个int类型的变量,比较的是变量的值是否一样。而引用数据类型:==比较的是引用的地址是否相同,比如说新建了两个对象,比较的是两个对象的地址是否一样。

比如,我们拿int类型和Integer类型来做测试:、

        int a = 1;
        int b = 2;
        int c = 1;
        System.out.println("================基本类型=============");
        System.out.println(a == c);
        System.out.println(a == b);
        System.out.println(b == c);
        Integer integera = new Integer(1);
        Integer integerb = new Integer(1);
        Integer integerc = integera;
        Integer integerd = new Integer(1);
        System.out.println("================引用类型=============");
        System.out.println(integera == integerb);
        System.out.println(integerb == integerc);
        System.out.println(integera == integerc);
        System.out.println(integera == integerd);

可以看到输出结果如下:

从这里我们可以看出来,当使用==时,如果是基本类型,直接比较的就是数据的值,因为基本类型保存的就是数据的值,而引用类型保存的是内存中的地址,所以==在比较引用类型时比较的是内存中的地址,可以看到,integera和integerc内存地址相同,此时结果为true,但是,当integera与integerd比较时,虽然两者的值相同,但是引用类型每次new的时候会开辟一片新的区域,所以两者地址是不同的,此时结果为false。

注:我们都知道,引用类型保存的是内存的地址,比如String是不可变的,如果你定义了一个String a = "a";然后令 a = "b",此时改变了String 的内容吗?答案是:没有。因为此时仅仅是在内存中重新开辟了一个区间,修改了a的内存地址,但是原来的“a”依然在内存中存在。那么这个时候又出现一个问题,如果我定义了好几个String类型,他们的值是相同的,这个时候使用==和equals有区别吗?代码如下:

        String a = "a";
        String b = "a";
        String c = new String("a");
        System.out.println(a.equals(b));
        System.out.println(a == b);
        System.out.println(a.equals(c));
        System.out.println(a == c);

结果如下:

问题来了,既然String是不可变的,那么a和b应该指向的是不同的地址,为什么使用==和equals都是true呢?原因就是:Java对于字符串序列相同的两个String变量指向的都是同一个地址,也就是说,只要值相同,不管有多少个变量,都指向同一个地址,所以此时无论使用equals和==都是true。那么使用new String 为啥不同呢?因为一旦使用new,那么就相当于重新开辟了内存空间,此时,虽然值相同,但是内存地址不同,所以结果不同

equals比较

当使用equals比较时,equals只能用于封装数据类型,但是并不是说equals只能用于引用数据的比较,equals方法只能由类或者对象去调用,而封装数据类型就是一个类。equals方法如果使用jdk自带的equals方法,那么就只能比较封装数据类型和字符串,如果想要比较对象和其他的object类型,需要重写该方法。

equals比较的两者的内容是否相等,不会比较内存地址。通过查看object类中的equals源码,我们可以发现,其实equals内部使用的依然是==,这里可能很多人会说,两个一样,但是为什么==如果基本类型比较的就是值是否相等,引用类型就比较的是内存地址,而equals单纯的比较的是两者的内容呢?

原因就是,Java重写了object的equals方法,如下,Integer包装类重写的equals方法:

String引用类型中对equals的重写:

通过这里我们就可以看出来,此时比较的只是值了,并不涉及内存地址。所以测试如下:

        Integer integera = new Integer(1);
        Integer integerb = new Integer(1);
        Integer integerc = integera;
        Integer integerd = new Integer(1);
        System.out.println(integera.equals(integerb));
        System.out.println(integera.equals(a));
        System.out.println(integerb.equals(integerc));

结果如下:

通过这里我们看出来,即便是不同的内存地址,只要内存地址的内容一样,equals就会返回true,但是,此时使用==会返回false。

如果你想比较两个对象是否相同,那么只能重写equals方法了,否则,无论使用哪一种,返回的都是false,因为他们都是用的==,比较的是地址

 

消费级显卡跑大模型:RTX 3060 12G 部署 70 亿参数 AI 编程助手的优化实战 本文详细介绍了如何在消费级显卡RTX 3060 12G上,通过量化、投机解码和分页KV-Cache等核心优化技术,成功部署并流畅运行70亿参数的CodeLlama-7B编程助手。文章提供了从环境配置、模型准备到参数调优的完整实战笔记,实测显存占用降至7.3GB,生成速度达21.7 token/秒,为开发者和技术爱好者提供了可行的本地AI部署方案。 阅读详情

相关推荐

保姆级教程:在STM32H750VBT6上跑起来CMSIS-DSP库(基于CubeMX+Keil)

本文详细介绍了在STM32H750VBT6微控制器上配置和运行CMSIS-DSP库的全过程,包括开发环境搭建、CubeMX工程配置、Keil工程设置以及DSP库的实际应用示例。通过FFT频谱分析和音频均衡器等实战案例,展示了如何利用STM32H750VBT6的硬件FPU加速DSP运算,提升实时信号处理性能。

weixin_30236595的博客 455

Java中==和equals()的区别

==和equals()最大的区别是:一个是运算符,一个是方法。 ==:如果比较的对象是基本数据类型,则比较数值是否相等;如果比较的是引用数据类型,则比较的是对象的地址是否相等。 equals():用来比较两个对象的内容是否相等。 注意: equals方法不能用于基本数据类型的变量,如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址。 ...

应无所住而生其心 3万+

ZYNQ出现问题及解决办法汇总(一直更新)

问题目录使用软件及开发板版本一,vitis在build project时卡住。二,Could not find FPGA device on the board for connection 'Local'三,FPGA configuration failed:DONE PIN is not high四,Could not find ARM device on the board for connection 'Local' 使用软件及开发板版本 开发板:MZ7XA-7020 软件:vitis2020.2(

qq_45057368的博客 1万+

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

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

趁年轻不如拼一拼 2万+

Qt快速读取Excel文件

网上很多读取方式都是如下形式,太慢了,打开文件+读取文件要6s以上,实在是受不了! QAxObject excel("Excel.Application"); excel.setProperty("Visible", false); QAxObject *work_books = excel.querySubObject("WorkBooks"); work_boo...

c+c++的博客 2万+

从DMD芯片到3D视觉革命:揭秘DLP工业投影光机的核心技术

本文深入解析了DMD芯片在DLP工业投影光机中的核心技术应用,揭示了其如何通过3D结构光技术实现微米级精度。从DMD芯片的机械设计到工业级光机的特殊优化,再到光固化3D打印和系统集成,展现了DLP技术在工业自动化和智能制造中的革命性作用。

weixin_29048775的博客 509

“==“和equals的区别是什么

2021年了,奉上我最喜欢的一句话“愿你孤独的努力都有回报,愿你前行的路上有人陪伴”;愿所有默默努力的人在某个时刻都可以一鸣惊人,我也希望你们可以一直坚持下去,你们也为了自己的目标而不断努力,我也始终相信,付出的努力终会有所回报。 编程是一个漫长的过程,一旦技术积累到某个节点,终会成爆发之势。一起加油,健康最重要,远离ICU???? 最近突然浏览到了一篇“==”和“equals”的区别,突然觉得自己应该深入理解一下它们之间的区别了(哈,不找理由了,菜是原罪????) 相信只要你学过编程,那么“==”和

Kevinnsm的博客 1万+

MagicDraw-需求图

MagicDraw学习笔记

木头征的博客 4134

Java经典面试基础知识:==和equals有什么区别?

一、==当比较的值是基本类型时是值比较,当值是引用类型时是引用比较

IRON__MAN__的博客 323

RK3588 , 基于mpp 解码 Jpeg To RGB

本文介绍了在RK3588开发板上使用Rockchip MPP(Media Process Platform)硬件加速接口将JPEG图像解码为RGB格式的完整流程。主要包括三个关键步骤:1) 读取JPEG文件数据;2) 配置MPP解码器,包括初始化上下文、设置RGB888输出格式和解码参数;3) 执行解码任务并将结果保存为图像文件。通过硬件加速,该方法能高效完成JPEG到RGB的转换,适用于嵌入式多媒体处理场景。

J。 1210

AgentScope 实战训练营-7 种多智能体协作模式详解

本教程基于阿里巴巴开源的AgentScope Java框架,系统讲解多智能体系统的开发方法。涵盖7种核心协作模式:Pipeline流水线、Routing路由、Handoffs智能体交接、Supervisor监督器、Subagent子智能体、Skills技能系统及Workflow工作流。详细阐述ReActAgent、AgentScopeAgent、StateGraph等核心概念,提供完整的配置示例与代码实现,帮助开发者快速掌握基于Spring AI Alibaba的多智能体应用开发。

program哲学 162

浅谈Java中equals()和==的区别

一.先来说说Java的基本数据类型和引用类型 八大基本数据类型:Byte,short,int,long,double,folat,boolean,char,其中占一个字节的是byte,short和char占两个字节,int,float占四个字节,double和long占8个字节,boolean只有true和false,这八种数据变量中直接存储值 八大基本数据类型对应着各自的封装类型,提供了更多的方法,且不进行初始化时值默认为空(基本数据类型必须初始化) 像String类型属于引用类型,变量中存储的是地

gb4215287的博客 368

AgentScope深入分析-ReActAgent

ReActAgent 是 AgentScope 框架中最核心的智能体实现,它完美诠释了"推理-行动"(Reasoning-Acting)循环的精髓。本文将深入分析 ReActAgent 的类继承关系、核心执行流程,以及状态管理、钩子机制、实时介入等关键技术点。通过阅读本文,你会理解智能体如何与模型交互、如何执行工具、如何处理中断,以及这些机制背后的设计考量。模块化:通过组合不同的组件(模型、格式化器、工具集、记忆)来构建智能体透明性:所有关键流程都对开发者可见,可以精确控制可扩展性。

842

== 和 equals 的区别

== 和 equals 的区别是什么? 使用 == 比较 Java中的8种基本数据类型(byte,short,char,int,long,float,double,boolean)比较他们之间的值是否相等。 引用数据类型,比较的是他们在堆内存地址是否相等。每新new一个引用类型的对象,会重新分配堆内存空间,使用==比较返回false。 使用 equals 比较 equals方法是...

ConstXiong 6万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

在java中==和equals()的区别

在Java学习和面试中经常遇到这个问题,虽然想着简单,但还是决定记录下来,毕竟菜嘛...... ==: ==是直接比较的两个对象的堆内存地址,如果相等,则说明这两个引用实际是指向同一个对象地址的。但是我们又常常碰到这样一个问题 最终结果是true,true,那既然==是比较的地址,那么int数据的地址是怎样的呢,String又是怎样的呢? 对于基本数据类型(byte,short,cha...

LCSY的博客 11万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

java中==和equals和hashCode的区别

1、== java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型         byte,short,char,int,long,float,double,boolean   他们之间的比较,应用双等号(==),比较的是他们的值。  2.引用类型(类、接口、数组)         当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出...

u013025649的专栏 1万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Java中==和equals的区别

==操作符与equals方法的区别

骑个小蜗牛的博客 4万+

【Java】==和equals的区别

哈希表允许哈希冲突(即不同的对象具有相同的哈希值),并通过链表或红黑树等机制处理冲突。都用于比较对象,但它们的行为和用途有显著的区别。不同,哈希表可能会将它们存储在不同的位置,导致查找失败或行为异常。不同,哈希表会将它们存储在不同的位置,导致查找失败。时,建议将常量或已知非空的对象放在前面。:比较对象的内容(默认比较引用,可重写)。计算对象的哈希值,确定存储位置(桶)。类中定义的方法,用于比较两个对象的。:比较基本数据类型的值或对象的引用。(即内存地址),而不是对象的内容。比较对象内容,找到匹配的对象。

Eurekame2000的博客 2980

Java 中 Equals和==的区别

在谈论equals和==的区别前,我们先简单介绍一下JVM中内存分配的问题。 在JVM中 内存分为栈内存和堆内存。二者有什么区别呢? 当我们创建一个对象(new Object)时,就会调用它的构造函数来开辟空间,将对象数据存储到堆内存中,与此同时在栈内存中生成对应的引用,当我们在后续代码中调用的时候用的都是栈内存中的引用,还需注意的一点,基本数据类型是存储在栈内存中。有了一定的了解 我们来看E

tcytcy123的博客 4万+

详解Java中equals和==的区别

Java中equals和==的区别(详细概述) 详细结论 == 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。基本数据类型中比较的是值是否相等。 equals用来比较的是两个对象的内容是否相等,由于所有的类都是继承自java.lang.Object类的,所以适用于所有对象,如果没有对该方法进行覆盖的话,调用的仍然是Object类中的方法,而...

Touch 2594

Java中 ==和equals的区别?

方法通常会根据对象的内容来判断两个对象是否相等,通常会检查对象的字段值是否相同。比较的是两个对象的内存地址,即它们是否是同一个对象。如果两个对象引用的是同一个内存地址,方法,定义自定义的对象比较逻辑。每个类可以重写(Override)如果你有一个自定义的类(比如。如果这两个字段都相同,方法,以便按内容比较对象。如果它们是不同的对象,的值都为 10,使用。方法来比较对象的内容。对于基本数据类型(如。,因为它们的值相同。

此人很懒,什么都没有写~~ 1739

== 和 equals() 的区别

比较维度==equals()类型操作符方法基本类型比较值不可用引用类型默认比较内存地址比较内存地址(同==)引用类型重写后仍比较内存地址比较自定义内容String比较是否同一对象比较字符串内容包装类(缓存内)可能true(同一对象)比较值包装类(缓存外)false(不同对象)比较值null处理为true应返回false性能O(1)可能O(n)集合中使用不适合必须正确实现最佳实践基本类型、枚举比较引用类型内容比较黄金法则:基本类型→ 用==引用类型比较引用→ 用==引用类型比较内容。

2301_78125917的博客 1303

Java基础之——equals和==的区别和联系

本文介绍了Java中equals和==的区别与联系。作者星河以通俗易懂的语言解释了两者的使用场景:基本数据类型只能用==比较值,引用数据类型用==比较内存地址。而equals方法在Object类中默认比较地址,但在String等类中被重写为比较内容。文章强调,若不重写equals,其效果等同于==;重写后则可自定义比较规则。全文用大白话讲解技术概念,旨在帮助读者轻松理解这一Java基础知识。

曹举的个人博客 931

==和equals()方法的区别

开发工具与关键技术:MyEclipse 10、Java jdk 作者: 撰写时间:2019年5月7日 在初学java的时候,我们很容易会把“和equals()”的意思很容易混淆。因为它们的意思都是比较是否相等。那么和equals()之间的区别在于哪里??如果我们不把这个弄清楚,那么就很容易出现一些低级的错误。那我今天带你了解了解==和equals()的区别在哪。 public class Fin...

weixin_43741599的博客 1895

equals和==的区别 ==:

==: == 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。 1、比较的是操作符两端的操作数是否是同一个对象。 2、两边的操作数必须是同一类型的(可以是父子类之间)才能编译通过。 3、比较的是地址,如果是具体的阿拉伯数字的比较,值相等则为true,如: int a=10 与 long b=10L 与 d...

m0_38087224的博客 528
上一篇: Java基础知识:Java集合——List接口之Vector
下一篇: 树、森林和二叉树的转换
Mr.姚先森
博客等级 码龄11年 26粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值