Equals vs "=="

"=="是一个运算符,对于对象A和B,如果表达式为 A==B ,将比较 A和B所指向的对象是否是同一个,如果式同一个对象的话,为true , vise versa. ==永远比较的是对象所指的指针。

equals()是从Object类继承下来的方法,对于没有重载equals()方法的类来说,调用A.equals(B)将使用Object类默认的equals()函数。从spec中的java.lang.Object#equals()的说明来看 ,“当且仅当 xy 引用同一个对象时,此方法才返回 truex == y 具有值 true)”即默认的equals方法和“==”的结果是一致的。

对于那些override了equals方法的class来说,如何确定equals的定义就是和spec的具体要求有关了。
不过要注意的是,“当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。”(来自java spec)。同样,Effective Java中也特别强调了重写equals函数之后, 一定要重写hashCode()。应该是绝大多数的equals函数是通过判断hashCode来得出结果的。

对于String对象来说,它重写了equals()方法,要求是“比较此字符串与指定的对象。当且仅当该参数不为 null,并且是表示与此对象相同的字符序列的 String 对象时,结果才为 true。”。

对 于数组来说,比较两个数组是否相等,应该调用Array.equals()方法。java.util.Arrays类提供了多个equals()的 static方法,分别用于比较boolean,byte,char,short,int,long,float,double和object数组是否相 等。
要测试两个String[]是否相等,应该使用java.util.Arrays.equals(String[], String[]). 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值