Java开发——15. equals和== 的区别

简介: 类型不同 对象不同 运行速度不同

总结:

类型不同   对象不同   运行速度不同


一:类型不同

   equals():是Object中声明的方法;

   ==:是比较元素符。


二:比较对象不同

   equals():在Object底层仍是使用==来判断传入对象是否相同;如果没有对equals进行重写,equals和==实现的效果是相同的。

   如果该对象没有重写equals方法,则比较的是地址值,如果重写了,就按重写的规则来比较两个对象,会比较类中的相应属性是否都相等;重写过后不是比较两个对象的内存地址值是否相同,而是比较两个对象的“内容值”是否相同


//object中定义的equal方法publicbooleanequals(Objectobj) {
return (this==obj);
}
//可见,底层仍然是使用 == 来判断,当前内容和传入对象是否相同


在不同的类中重写的equals方法不同,所以要理解本质,并不是所有的equals方法都是比较地址的。重写过后不是比较两个对象的内存地址值是否相同,而是比较两个对象的“内容值”是否相同


//String类中重写的equals方法publicbooleanequals(ObjectanObject) {
if (this==anObject) {
returntrue;
        }
//instanceof :是多态中的关键字,用来判断anObject 是否是 String数据类型。if (anObjectinstanceofString) {
StringanotherString= (String)anObject;
intn=value.length;
if (n==anotherString.value.length) {
charv1[] =value;
charv2[] =anotherString.value;
inti=0;
while (n--!=0) {
if (v1[i] !=v2[i])
returnfalse;
i++;
                }
returntrue;
            }
        }
returnfalse;
    }


equals 和 == 的区别:


Stringstr="小红";
Stringst2="小红";
//这里比较的是字符串的值,可以对照String类中重写的equals方法booleanequals1=str.equals(st2);
System.out.println(equals1); //trueStringstr2[] = {"1","2","3","4"};
Stringstr3[] = {"1","2","3","4"};
//这里比较的是str2 和 str3的地址值,即使他们存入的内容是相同的,但是实际比较的是他们存储在内存中的地址值booleanbl=str2==str3;
System.out.println(bl);  //false//比较的就是地址值是否相同booleanequals=str.equals(str3);
System.out.println(equals);//false


   ==:

       针对基本数据类型:比较的就是值;

       针对引用数据类型:比较的就是内存地址;


Stringstr="小红";
Stringstr2[] = {"1","2","3","4"};
Stringstr3[] = {"1","2","3","4"};
//这里比较的是str2 和 str3的地址值,即使他们存入的内容是相同的,但是实际比较的是他们存储在内存中的地址值booleanbl=str2==str3;
System.out.println(bl);  //false//这里是把获取到的str2[1]的值,和str字符串进行比较;//所以这里比较的是在常量池中的字符串和在堆内存中存储的str2的值进行比较booleanbl1=str==str2[1];
System.out.println(bl1); //false//这里比较的是基本数据类型的值,只要定义的值相同,都会返回TRUE。intnum=5;
doublenum2=5;
booleanbl2=num==num2;
System.out.println(bl2); //true


三:运行速度不同

   equals():没有==运行速度快。

相关文章
|
12月前
|
Java 测试技术
Java浮点类型详解:使用与区别
Java中的浮点类型主要包括float和double,它们在内存占用、精度范围和使用场景上有显著差异。float占用4字节,提供约6-7位有效数字;double占用8字节,提供约15-16位有效数字。float适合内存敏感或精度要求不高的场景,而double精度更高,是Java默认的浮点类型,推荐在大多数情况下使用。两者都存在精度限制,不能用于需要精确计算的金融领域。比较浮点数时应使用误差范围或BigDecimal类。科学计算和工程计算通常使用double,而金融计算应使用BigDecimal。
3777 102
|
10月前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
存储 缓存 人工智能
Java int和Integer的区别
本文介绍了Java中int与Integer的区别及==与equals的比较机制。Integer是int的包装类,支持null值。使用==比较时,int直接比较数值,而Integer比较对象地址;在-128至127范围内的Integer值可缓存,超出该范围或使用new创建时则返回不同对象。equals方法则始终比较实际数值。
403 0
|
安全 Java 领域建模
Java 17 探秘:不容错过的现代开发利器
Java 17 探秘:不容错过的现代开发利器
1276 0
|
11月前
|
消息中间件 人工智能 Java
抖音微信爆款小游戏大全:免费休闲/竞技/益智/PHP+Java全筏开源开发
本文基于2025年最新行业数据,深入解析抖音/微信爆款小游戏的开发逻辑,重点讲解PHP+Java双引擎架构实战,涵盖技术选型、架构设计、性能优化与开源生态,提供完整开源工具链,助力开发者从理论到落地打造高留存、高并发的小游戏产品。
|
11月前
|
安全 Java API
Java SE 与 Java EE 区别解析及应用场景对比
在Java编程世界中,Java SE(Java Standard Edition)和Java EE(Java Enterprise Edition)是两个重要的平台版本,它们各自有着独特的定位和应用场景。理解它们之间的差异,对于开发者选择合适的技术栈进行项目开发至关重要。
1608 1
|
JavaScript 安全 前端开发
Java开发:最新技术驱动的病人挂号系统实操指南与全流程操作技巧汇总
本文介绍基于Spring Boot 3.x、Vue 3等最新技术构建现代化病人挂号系统,涵盖技术选型、核心功能实现与部署方案,助力开发者快速搭建高效、安全的医疗挂号平台。
497 3
|
安全 Java 数据库
Java 项目实战病人挂号系统网站设计开发步骤及核心功能实现指南
本文介绍了基于Java的病人挂号系统网站的技术方案与应用实例,涵盖SSM与Spring Boot框架选型、数据库设计、功能模块划分及安全机制实现。系统支持患者在线注册、登录、挂号与预约,管理员可进行医院信息与排班管理。通过实际案例展示系统开发流程与核心代码实现,为Java Web医疗项目开发提供参考。
512 2