Java面试Day04-“equals“和“==“的区别

发布时间:2023年12月24日

一个变量,如果存储的数据是基本数据类型,那么变量所指向的就是它实际的值,但如果这个变量存储的数据是引用数据类型,那么变量所指向的就是它的引用地址(实际变量值存储在堆内存中,变量名指向的是变量的堆内存地址)。

数据的存储位置:

在方法中声明的变量

在方法中声明的变量是局部变量,每当程序调用方法时,系统会为该方法建立一个方法栈,其所在方法栈声明的变量就存放在方法栈中,当方法执行完毕,系统会释放该方法栈,在方法中声明的变量随着方法栈的释放而被销毁,这就是局部变量只能在方法中有效的原因;

(1)当声明的是基本数据类型的变量时,其变量名及值存储在栈内存中;

(2)当声明的是引用数据类型的变量时,其变量存储在栈内存中,变量的值存储的是所指向对象的引用地址,该变量所指向的对象存储在堆内存中

在类中声明的变量

在类中声明的变量是成员变量,也叫全局变量,存放在堆中,不随着某方法执行结束而被销毁;

(1)当声明的是基本数据类型的变量时,其变量名及其值放在堆内存中;

(2)当声明的是引用数据类型的变量时,其变量名及其值也放在堆内存中,变量的值存储的也是所指向对象的引用地址,该变量所指向的对象同样存储在堆内存中
?

== 的作用:
  基本类型:比较的就是值是否相同
  引用类型:比较的就是地址值是否相同
equals 的作用:
 引用类型:默认情况下,比较的是地址值。
??? 注意,我们可以根据情况自己重写该方法。一般重写都是自动生成,比较对象的成员变量值是否相同。

Object中的equals源码,默认比较的是地址值:

public boolean equals(Object obj){
    return (this == obj )
}

Integer中的equals重写了Object的equals方法,变成了判断两个值是否相同:

public boolean equals(Object obj){
    if(obj instanceof Integer){
        return value == ((Integer)obj).intValue();
    }
    return false;
}

风止意难平。

文章来源:https://blog.csdn.net/weixin_64753607/article/details/135139634
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。