“==”运算符和equals()方法的区别

“==”运算符的两个作用

        比较基本数据类型变量

                在比较两个基本数据类型变量时,是比较两个变量的数据值是否相等,要注意自动类型转换。 byte->short-> char –>int->long->float->double。比如int i=10;和double j=10.0;是否相等?因为存在类型提升,int 提升为double,结果当然是相等的。相同类型,相同数值也是必然相等。

        比较引用数据类型变量

                ==比较两个引用数据类型变量时,比较的是两个变量的地址值是否相等,即在内存中指向的是不是同一个对象。对象c1和c2虽然属性的值相等,但在内存中指向的不是同一个地址,就会返回false。

                对象s1和s2值相等但是在内存中地址不同,所以返回false

equals()方法

        适用于引用型数据类型。equals()方法是属于Object类的,那么下边的c1和c2,s1和s2是否相等呢?

结果为:c1和c2不相等,s1和s2相等

我们先看一下Object类中的equals()方法的源码。如下图我们可以看到,Object根类中的equals()方法还是使用的“==”运算符来进行比较。CustomerTest这个类是自己写的,并没有重写equals方法,所比较的还是地址,和==运算符一样,返回false。

Object类的equals()方法

但是String,Date,File,和包装类都重写了Object的equals方法,比较的是对象的属性值是否相等,看一下string类的equals()方法的源码,如图所示:

string类重写Object类的equals()方法

我们可以对CustomerTest类的equals()方法进行重写,在idea中,alt+insert,出现自动构建菜单,选择重写equals()and hashCode(),选择方法的形参,完成创建。

       测试一下,如图,c1和c2为true。

        总结

== 既可以比较基本数据类型,也可以比较引用数据类型,对于基本数据类型比较值,对于引用数据类型比较内存地址

equals()方法比较引用数据类型,如果该方法没有被重写过,依然使用==进行比较内存地址,重写过的则是可以比较对象的属性值是否相等。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值