Effective Java 学习笔记(8)
2010-01-23 15:56
429 查看
当重载equals方法时,遵循惯例.
equals不是每个类都必须重载,当以下几个条件满足,可以不重载equals.
1. 类的实例只有同一个才被判为相等. 如Thread类.
2. 不用关心两个对象是否逻辑相等的时候,或是说比较对象没有意义.
3.父类已经重载了equals,而且父类的equals也适用于子类,子类就不用重载equals.
4.这是一个私有类或是包内访问,你确定equals不会被调用.
那什么时候使用equals呢,当两个对象之间有逻辑相等的意义的时候,而其父类并没有重载适合的equals的时候, 换句话说,也就是数据类. 这种类有比较值的需求, 而不是简单的判断是不是同一个对象.
然而,对实例化进行控制的数据类型对象,如singleton,不用重载equals.
重载要注意以下几个原则:
反射,对称,传递,一致
另外,对于null,一定要返回false.
高效的equals可以参考以下几点.
1. 用==判断是不是同一个实例.
2. 使用instanceof判断是不是同一个类型.
3.强制转化成正确的类型.
4.对每个有比较意义的成员变量都作检查.
5.当你写完之后,要问自己,这个函数是不是对称的,可传递的,一致的.
写完equals后,要注意:
1. 在重载equals后,必须要重载hashCode.
2. 不能简单的比较一个field是不是相等. 如对File这对类,如果两个对象打开的是相同内容的文件,此时不应该判断为相同.
3.不要用另一个类型来代替参数中的Object,否则这就不是重载.
错误例子:
public boolean equals(MyClass o) {
...
}
在编译前使用@Override 可以使编译器在不正确的函数签名时报错.
equals不是每个类都必须重载,当以下几个条件满足,可以不重载equals.
1. 类的实例只有同一个才被判为相等. 如Thread类.
2. 不用关心两个对象是否逻辑相等的时候,或是说比较对象没有意义.
3.父类已经重载了equals,而且父类的equals也适用于子类,子类就不用重载equals.
4.这是一个私有类或是包内访问,你确定equals不会被调用.
那什么时候使用equals呢,当两个对象之间有逻辑相等的意义的时候,而其父类并没有重载适合的equals的时候, 换句话说,也就是数据类. 这种类有比较值的需求, 而不是简单的判断是不是同一个对象.
然而,对实例化进行控制的数据类型对象,如singleton,不用重载equals.
重载要注意以下几个原则:
反射,对称,传递,一致
另外,对于null,一定要返回false.
高效的equals可以参考以下几点.
1. 用==判断是不是同一个实例.
2. 使用instanceof判断是不是同一个类型.
3.强制转化成正确的类型.
4.对每个有比较意义的成员变量都作检查.
5.当你写完之后,要问自己,这个函数是不是对称的,可传递的,一致的.
写完equals后,要注意:
1. 在重载equals后,必须要重载hashCode.
2. 不能简单的比较一个field是不是相等. 如对File这对类,如果两个对象打开的是相同内容的文件,此时不应该判断为相同.
3.不要用另一个类型来代替参数中的Object,否则这就不是重载.
错误例子:
public boolean equals(MyClass o) {
...
}
在编译前使用@Override 可以使编译器在不正确的函数签名时报错.
相关文章推荐
- 我的Effective Java 学习笔记(一)
- effective java 学习笔记(一) 2012-4-24
- effective java 学习笔记
- Effective Java 学习笔记(1)
- Effective Java 学习笔记(2)
- Effective Java 学习笔记 (10)
- Effective Java 学习笔记(15)
- effective-java 学习笔记(1)
- Effective Java学习笔记 第61条: 抛出与抽象相对应的异常
- Effective Java 学习笔记(二)
- Effective Java 学习笔记(9)
- Effective Java 学习笔记 (6)
- Effective Java-学习笔记(10-11章)
- effective java 学习笔记(一)
- effective java 学习笔记(二)
- Effective Java 学习笔记 (11)
- Effective Java 学习笔记(25)
- effective Java 学习笔记(三)
- Effective Java-学习笔记(2-5章)
- Effective Java 学习笔记(四、五)