关于==与equals()区别

想相信很多人学习Java的时候都会被这两个的区别弄的晕头转向,我一开始也是这样的,今晚看thinking in Java的时候突然对这个问题有了比较清晰地认识,特此跟大家分享一下:

首先要明确一个预备知识,也就是Java类的存储位置问题,当我们构建一个类的两个对象的时候,Java会在内存中开辟两个对象的空间,并且让两个对象名分别指向这两个类,而每个类的对象空间中都存着各自的变量值。

下面就是正题啦:

当我们创建两个Interger()【注意,Interger类是java类库的类,这个提示后面会提到作用】

Interger n1 = new Interger(47);

Interger n2= new Interger(47);

若用==比较n1 与 n2 这两个类 返回的是false,而用equals比较两个对象则返回true。为什么呢,因为==比较是引用,也就是所,比较n1,n2两个对象名指向的空间,当然是不一样的。而equals比较是是n1,n2的内容,当然是一样的。

可能有人看到这会说,很简单啊,==比较的是对象的引用,equals比较的时对象的具体内容。

但事情并不是这么简单地,其实equals方法比较的也是对象的引用,那为什么前面的Interger 两个对象可以比较出来呢。这个是因为,Interger类是Java类库的类,Java类库已经对大部分的类中得equals方法进行了重写,使其变成比较对象中得内容。

也就是说,如果你想比较自己写的类的内容是否一样,依然不能用equals。但是你可以在自己的类中重写equals方法,使其具备比较内容的作用!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值