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():没有==运行速度快。

相关文章
|
2月前
|
Java API Maven
如何使用Java开发抖音API接口?
在数字化时代,社交媒体平台如抖音成为生活的重要部分。本文详细介绍了如何用Java开发抖音API接口,从创建开发者账号、申请API权限、准备开发环境,到编写代码、测试运行及注意事项,全面覆盖了整个开发流程。
204 10
|
2月前
|
监控 Java API
如何使用Java语言快速开发一套智慧工地系统
使用Java开发智慧工地系统,采用Spring Cloud微服务架构和前后端分离设计,结合MySQL、MongoDB数据库及RESTful API,集成人脸识别、视频监控、设备与环境监测等功能模块,运用Spark/Flink处理大数据,ECharts/AntV G2实现数据可视化,确保系统安全与性能,采用敏捷开发模式,提供详尽文档与用户培训,支持云部署与容器化管理,快速构建高效、灵活的智慧工地解决方案。
|
9天前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
1月前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
56 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
19天前
|
存储 JavaScript 前端开发
基于 SpringBoot 和 Vue 开发校园点餐订餐外卖跑腿Java源码
一个非常实用的校园外卖系统,基于 SpringBoot 和 Vue 的开发。这一系统源于黑马的外卖案例项目 经过站长的进一步改进和优化,提供了更丰富的功能和更高的可用性。 这个项目的架构设计非常有趣。虽然它采用了SpringBoot和Vue的组合,但并不是一个完全分离的项目。 前端视图通过JS的方式引入了Vue和Element UI,既能利用Vue的快速开发优势,
100 13
|
24天前
|
算法 Java API
如何使用Java开发获得淘宝商品描述API接口?
本文详细介绍如何使用Java开发调用淘宝商品描述API接口,涵盖从注册淘宝开放平台账号、阅读平台规则、创建应用并申请接口权限,到安装开发工具、配置开发环境、获取访问令牌,以及具体的Java代码实现和注意事项。通过遵循这些步骤,开发者可以高效地获取商品详情、描述及图片等信息,为项目和业务增添价值。
56 10
|
17天前
|
前端开发 Java 测试技术
java日常开发中如何写出优雅的好维护的代码
代码可读性太差,实际是给团队后续开发中埋坑,优化在平时,没有那个团队会说我专门给你一个月来优化之前的代码,所以在日常开发中就要多注意可读性问题,不要写出几天之后自己都看不懂的代码。
54 2
|
25天前
|
存储 Java C++
java中“==”和equals,究竟比的是什么
java中“==”和equals,究竟比的是什么
50 4
|
2月前
|
Java 程序员
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
小米,29岁程序员,分享了一次面试经历,详细解析了Java中&和&&的区别及应用场景,展示了扎实的基础知识和良好的应变能力,最终成功获得Offer。
83 14
|
27天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。