java ----Equals 与 ==

简介: Equals 与 ==

.先来说说Java的基本数据类型和引用类型

 

八大基本数据类型:Byteshortintlongdoublefolatbooleanchar,其中占一个字节的是byteshortchar占两个字节,intfloat占四个字节,doublelong8个字节,boolean只有truefalse,这八种数据变量中直接存储值

 

八大基本数据类型对应着各自的封装类型,提供了更多的方法,且不进行初始化时值默认为空(基本数据类型必须初始化)

 

String类型属于引用类型,变量中存储的是地址,对应的地址存储数据

 

.equals==

 

equals是判断两个变量或者实例指向同一个内存空间的值是不是相同

 

==是判断两个变量或者实例是不是指向同一个内存空间

 

举个通俗的例子来说,==是判断两个人是不是住在同一个地址,而equals是判断同一个地址里住的人是不是同一个

==计较的时候,两者的类型需要一致!

 

比如下面的代码

 

public class EqualsTest {

   public static void main(String[] args) {

       // TODO Auto-generated method stub

       Integer aaa=new Integer(5);

       Integer bbb=new Integer(5);

     

       int a=10;

       int b=10;

       String str1=new String("justice");

       String str2=new String("justice");

       String str3;

       str3=str1;

     

     

       System.out.println(aaa==bbb);

       System.out.println(aaa.equals(bbb));

       System.out.println(a==b);

     

       System.out.println(str1==str2);

       System.out.println(str1.equals(str2));

     

     

       System.out.println(str1==str3);

       System.out.println(str1.equals(str3));

   }

 

}

 

 

对应结果如下

 

image.png

 

 

aaabbb都是Integer封装类型,是不同的对象,变量存储地址, 所以==结果为falseequalstrue

 

ab都是基本数据类型,变量存储值,所以==true,基本数据类型无equals方法(没有意义)

 

str1str2都是String类型,属于引用类型,变量存储地址,所以==falseequalstrue

 

创建str3的时候,str3指向了str1,所以str1str3的指向同一个地址,存储的数据自然相同,所以均为true

 

.接下来看个有意思的事情(有点神奇)

 

看图思考一下结果是什么???

 

image.png

 

 

结果。。。。。。。。。。。。。。。。。。。。。。。。

 

image.png

 

 

说下原因,之所以会有疑问,是大家觉得ac是不同的对象,所以地址不同,所以结果为false才对,但是定义一个Integer变量时,会默认进行Integer.valueOfa)操作,看一下这个方法的源码(按住ctrl+鼠标左键进入该方法),

image.jpeg

 

 

 

high的值为127low的值为-128,当进行这个方法时如果值在-128-127之间,返回的值也就是地址是相同的,所以ac的地址相同,a==c自然为true

 

原文链接:https://blog.csdn.net/qq_38162448/article/details/81611894

目录
相关文章
|
3天前
|
存储 Java C++
java中“==”和equals,究竟比的是什么
java中“==”和equals,究竟比的是什么
28 4
|
5月前
|
Java
Java中的equals()与==的区别与用法
【7月更文挑战第28天】
78 12
|
2月前
|
存储 Java C++
java中“==”和equals,究竟比的是什么
java中“==”和equals,究竟比的是什么
44 3
java中“==”和equals,究竟比的是什么
|
4月前
|
存储 Java
|
4月前
|
Java
【Java基础面试二十三】、==和equals()有什么区别?
这篇文章区分了Java中的`==`运算符和`equals()`方法:`==`用于基本数据类型时比较值是否相等,用于引用类型时比较内存地址是否相同;而`equals()`默认实现按内存地址比较,但通常被重写以根据对象内容比较是否相等。
【Java基础面试二十三】、==和equals()有什么区别?
|
4月前
|
Java
【Java基础面试二十一】、说一说hashCode()和equals()的关系
这篇文章讨论了Java中`hashCode()`和`equals()`方法之间的关系,强调如果两个对象相等,它们必须有相同的哈希码,但有相同哈希码的对象未必相等,并解释了这一关系在HashSet集合中判断元素是否重复的应用场景。
【Java基础面试二十一】、说一说hashCode()和equals()的关系
|
4月前
|
Java
【Java基础面试二十二】、为什么要重写hashCode()和equals()?
这篇文章解释了为什么需要重写`hashCode()`和`equals()`方法:因为Object类的`equals()`默认使用`==`比较,这在业务中通常是不够的,我们需要根据对象内容来比较相等性;同时,为了保持`hashCode()`与`equals()`的联动关系,一旦重写了`equals()`,通常也需要重写`hashCode()`。
【Java基础面试二十二】、为什么要重写hashCode()和equals()?
|
5月前
|
存储 Java 索引
java 中为什么重写 equals 后需要重写 hashCode
java 中为什么重写 equals 后需要重写 hashCode
69 8
|
4月前
|
存储 Java 索引
|
5月前
|
Java
Java中的Object类 ( 详解toString方法 | equals方法 )
Java中的Object类 ( 详解toString方法 | equals方法 )