java中的相等比较

1、java.lang.Object类中有两个非常重要的方法:

    public boolean equals(Object obj) {
        return (this == obj);//比较引用是否相同
    }
    public native int hashCode();//本地方法

2、Object类是每一个类的父类。所有的对象,包括数组,都实现了在Object类中定义的方法;

3、String 、Math、Integer、Double等类重写了object类的equals()方法,做值比较;

4、基本类型在栈上,本身进行值的比较;

5、equals()方法特性:

(1)自反性(reflexive):x不为null,x.equals(x)一定是true;

(2)对称性(symmetric):x、y不为null,当且仅当x.equals(y)是true时,y.equals(x)也是true;

(3)传递性(transitive):x、y、z、不为null,两两equals均为true;

(4)一致性(consistent):x、y不为null,对象信息没修改,多次调用equals()返回结果要一致;

(5)x不为null,x.equals(null)返回false;

6、hashCode()方法特性:

(1)equals()被override时,hashCode()也要被override;

(2)equals()没有改变,多次调用hashCode()得到的Integer也相等;

(3)equals()相等,hashCode()必相等;

(4)hashCode()相等,equals()未必等;

7、hashCode()在集合(Collection)中的作用:

(1)Java中的集合(Collection)有两类,一类是List,一类是;

(2)集合查找时,hashcode能大大降低对象比较次数,提高查找效率;

(3)StringBuffer等类的对象存储进集合类中会出现问题,没有重写equals和hashCode;

(4)HashMap、HashSet、HashTable而言,异常重要,用于寻址;

(5)容器类型程序设计语言,都会带hashCode,主要作用是为了配合基于散列的集合;

猜你喜欢

转载自my.oschina.net/u/3847203/blog/1809771