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

相关文章
|
1天前
|
存储 Java
|
4天前
|
人工智能 自然语言处理 Java
Spring AI,Spring团队开发的新组件,Java工程师快来一起体验吧
文章介绍了Spring AI,这是Spring团队开发的新组件,旨在为Java开发者提供易于集成的人工智能API,包括机器学习、自然语言处理和图像识别等功能,并通过实际代码示例展示了如何快速集成和使用这些AI技术。
Spring AI,Spring团队开发的新组件,Java工程师快来一起体验吧
|
6天前
|
存储 安全 Java
一天十道Java面试题----第二天(HashMap和hashTable的区别--------》sleep、wait、join)
这篇文章是关于Java面试的第二天笔记,涵盖了HashMap与HashTable的区别、ConcurrentHashMap的实现原理、IOC容器的实现方法、字节码的概念和作用、Java类加载器的类型、双亲委派模型、Java异常体系、GC如何判断对象可回收、线程的生命周期及状态,以及sleep、wait、join、yield的区别等十道面试题。
一天十道Java面试题----第二天(HashMap和hashTable的区别--------》sleep、wait、join)
|
8天前
|
前端开发 Oracle Java
【前端学java】java开发的依赖安装与环境配置(1)
【8月更文挑战第8天】java开发的依赖安装与环境配置
26 1
【前端学java】java开发的依赖安装与环境配置(1)
|
6天前
|
存储 关系型数据库 MySQL
一天五道Java面试题----第八天(怎么处理慢查询--------->简述Myisam和innodb的区别)
这篇文章是关于Java面试中关于数据库性能优化和MySQL特性的五个问题,包括处理慢查询、ACID特性保证、MVCC概念、MySQL主从同步原理以及MyISAM和InnoDB存储引擎的区别。
|
6天前
|
SQL 存储 Java
完整java开发中JDBC连接数据库代码和步骤
该博客文章详细介绍了使用JDBC连接数据库的完整步骤,包括加载JDBC驱动、提供连接URL、创建数据库连接、执行SQL语句、处理结果以及关闭JDBC对象的过程,并提供了相应的示例代码。
|
6天前
|
前端开发 Java 编译器
【前端学java】java中的Object类和前端中的Object有什么区别(9)
【8月更文挑战第10天】java中的Object类和前端中的Object有什么区别
14 0
【前端学java】java中的Object类和前端中的Object有什么区别(9)
|
11天前
|
Java
JAVA中public class和class的区别
JAVA中public class和class的区别
26 7
|
6天前
|
安全 前端开发 Java
Web端系统开发解决跨域问题——以Java SpringBoot框架配置Cors为例
在Web安全上下文中,源(Origin)是指一个URL的协议、域名和端口号的组合。这三个部分共同定义了资源的来源,浏览器会根据这些信息来判断两个资源是否属于同一源。例如,https://www.example.com:443和http://www.example.com虽然域名相同,但由于协议和端口号不同,它们被视为不同的源。同源(Same-Origin)是指两个URL的协议、域名和端口号完全相同。只有当这些条件都满足时,浏览器才认为这两个资源来自同一源,从而允许它们之间的交互操作。
Web端系统开发解决跨域问题——以Java SpringBoot框架配置Cors为例