equals方法和==关系
晚上翻了一下equals和==
==
对象使用==比较两个对象内存地址是否相等
基本类型使用==比较两个基本类型内容是否相等
为什么对象使用==和基本类型使用==不太一样是因为jvm编译时决定的
equals
object类中equals方法是这样的:
public boolean equals(Object obj) { return (this == obj); }
根据上面代码可以看出,如果两个对象使用equals方法比较,和直接使用==是一样的效果,比较两个对象的内存地址
但是在比较两个String字符串是否相等时,一般会使用equals,这是为什么?因为String将equals进行了重写,代码如下:
public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }
通过代码可以看出,先比较内存地址,内存地址相等就不用往下比了,如果内存地址不相等,判断被比较的对象是不是String类型,是的话再比较长度,最后在比较字符数组是否一致。
Integer中也对equals方法进行了重写。
结论
基本类型使用==进行比较,比较的内容
对象使用==和未重写的equals比较的都是地址,在这equals和==是一样的,因为equals就是调用了==进行比较
重写的equals各有各的内容,String和Integer等都是比较的内容。
如果你想比较两个对象,认为属性相等就是一个对象,可以进行重写equals。
不对之处,还望指正,谢谢。