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

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

数据的存储位置:

在方法中声明的变量

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

(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;
}

风止意难平。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值