==和equals闲谈

来源:互联网 发布:暨南大学网络教学 编辑:程序博客网 时间:2024/05/16 20:23

     一直以为==是比较引用,而equals是比较值,知道前不久才发现,其实==和equals都是比较引用是否相等。

    Object类是所有类的超类,而在Object类中的equals是比较引用,但是我们在对两个String进行比较时,equals实际却是比较的值,而不是比较的引用,可以通过这个例子来看出,String的equals方法是比较值是否相等。

  String str1 = new String("abc"); String str2 = "abc";

  boolean b = str1.equals(str2);通过测试可以发现b是为true的。

 按照常理说,他们两个并不是一个对象,并不像等,可是,为什么呢?因为String重写了Object的equals方法。并且,通过API查找String类,可以发现String的字面量是一个常量。由于String类型在内存中存放方式的特殊性,所以String类的equals方法是比较值。

  和String类似的Date方法重写了equals方法,也是比较值相等。所以在使用equals的时候,要注意是否被重写了。

原创粉丝点击