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
【JAVA】在 Queue 中 poll()和 remove()有什么区别
【JAVA】在 Queue 中 poll()和 remove()有什么区别
|
2天前
|
Java 数据安全/隐私保护 Spring
Java 中 Spring Boot 框架下的 Email 开发
Java 中 Spring Boot 框架下的 Email 开发
18 2
|
2天前
|
Java 开发框架 XML
JDK、JRE、Java SE、Java EE和Java ME有什么区别?
JDK、JRE、Java SE、Java EE和Java ME有什么区别?
|
2天前
|
Java
java一分钟之-字符流与字节流的区别
【5月更文挑战第11天】Java的输入输出通过流操作,分为字符流和字节流。字节流处理二进制数据,如图片、音频,基类是`InputStream`和`OutputStream`;字符流处理文本,基类是`Reader`和`Writer`。字符流涉及编码转换,字节流不涉及。易错点包括乱码(需指定编码)、混用流类型和忘记关闭流。示例展示了字节流和字符流读文件。理解区别并注意编码和资源管理可提高代码质量。
36 3
|
2天前
|
安全 Java 编译器
Java中String、StringBuilder和StringBuffer的区别
Java中String、StringBuilder和StringBuffer的区别
10 1
|
2天前
|
存储 Java 数据库连接
使用Java开发桌面应用程序
使用Java开发桌面应用程序
20 0
|
2天前
|
Java API 开发工具
java与Android开发入门指南
java与Android开发入门指南
15 0
|
2天前
|
分布式计算 负载均衡 Java
构建高可用性Java应用:介绍分布式系统设计与开发
构建高可用性Java应用:介绍分布式系统设计与开发
13 0
|
2天前
|
前端开发 安全 Java
使用Spring框架加速Java开发
使用Spring框架加速Java开发
56 0
|
2天前
|
前端开发 JavaScript Java
Java与Web开发的结合:JSP与Servlet
Java与Web开发的结合:JSP与Servlet
12 0