什么时候改写:1逻辑相等2确保不被调用时,改写之以抛出异常
约定:自反性,对称性,传递性,一致性,非空性
作者主要解释了对称性,传递性,一致性,
一致性,不要依赖于一些不稳定的因素,如网络等等
对称性,A很花哨的修改了equals方法,终于equal了B,但是B不为所动,不去equal A,
这一般出现在自定义类和其他类库的类equal的时候,譬如书中的CaseInsensitiveString和JDK的String。
作者着重讲述了传递性,例子讲的是增加了成员变量的子类,如果维持和父类equals,结果就丧失了传递性,JDK里的例子Timestamp和Date也是如此。
查看了下TimeStamp.equals()的api,里面有这样一句话,相对于基类中的 equals(Object) 方法而言,此方法是不对称的,此处基类就是指Date啦,Date可以equal Timestamp,但是TimeStamp不能equal Date,结论是,没法解决,除非父类不可实例化,子类之和子类之间equal,那就不会有问题,不然就别用继承,用复合。
关于非空性,作者简略了说了一句,但本人觉得很有用:不需要去判断Object o是否为null在instanceof的时候已经包含了这个功能。
如何写equals
1.先用==看是不是自己
2.instanceof
3.4.5,不写了,你懂的
告诫:
1.要改写hashcode()
2.不要过度的寻求等价关系
3.不要依赖于不稳定资源,防止不一致
4.别把重写变成重载,错误写法equals(MyClass o)
分享到:
相关推荐
2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2....
java_equals用法,用来熟悉重写equals方法的
Java重写equals同时需要重写hashCode的代码说明,以及如何重写hashCode方法,此代码演示按照effective java书籍说明的重写思路。代码中演示了使用集合存储对象,并且对象作为key,需重写equals和hashCode.
java中equals和==的区别.doc java中equals和==的区别.doc
能够加强对java中equals与==区别的理解。
Java语言深入_equals
Item 2: Consider a builder when faced with many constructor parameters Item 3: Enforce the singleton property with a private constructor or an enum type Item 4: Enforce noninstantiability with a ...
Java中的==与equals()实例方法Java中测试两个变量是否相等的方法有两个,一个是用==运算符,另一个就是object类提供的equals()方法。2
Java中equals方法隐藏的陷阱
浅谈Java中的equals和==Java开发Java经验技巧共6页.pdf.zip
2、为什么改写equals()的时候,总是要改写hashCode() 两个原则: hashCode()的返回值和equals()的关系如下: 如果x.equals(y)返回“true”,那么x和y的hashCode()必须相等。 如果x.equals(y)返回...
详细介绍和讲解Java中的==和equals区别
本文介绍了Java语言不直接支持关联数组,可以使用任何对象作为一个索引的数组,但在根Object类中使用 hashCode()方法明确表示期望广泛使用HashMap。理想情况下基于散列的容器提供有效插入和有效检索;直接在对象模式...
java 资料 equals 与== 的区别
equals和==的区别?equals与==的区别?equals和==有什么区别? Java解惑系列之一--equals和==之间究竟有什么区别 稍微学过一些java的同学都可能在网络上看到这样的一道题: 在java语言当中,equals和==之间究竟有...
【Java面试题】equals与==的区别
Java 2实用教程(第三版)实验指导与习题解答 清华大学出版社 (编著 耿祥义 张跃平) 实验模版代码 建议使用文档结构图 (选择Word菜单→视图→文档结构图) 上机实践1 初识Java 4 实验1 一个简单的应用程序 ...
重载equals方法示例重载equals方法示例重载equals方法示例重载equals方法示例重载equals方法示例