易截截图软件、单文件、免安装、纯绿色、仅160KB

Effective Java 学习笔记(8)

当重载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 可以使编译器在不正确的函数签名时报错.
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/mutsinghua/archive/2010/01/23/5248724.aspx


相关文档:

java多线程读写同一个文件的代码

本文提供java多线程分别定时读写同一个文件的样例,其中两个线程,一个每分钟写入当前时间到指定文件,另一个线程读出每分钟新写的内容。
使用简单的Thread.sleep技术实现定时
package test.thread;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
im ......

Java:在RCP中实现用托拽打开Editor

工作台窗口的Editor区域默认是显示的,而且它支持拖拽操作。在Eclipse里面,把一个文件拖到Editor区域,就会自动打开该文件的
Editor.该特性是在IWorkbenchWindowConfigurer 中设置。
 
    在PassWord Gate中,当拖动Password Gate View中的一个Group 或者
Service到Editor区域,会在Editor显示该 ......

Effective Java 学习笔记(3)

在实现singleton模式时,我们有以下几种方法。
1. public static final 字段加上private 的构造函数。
public class Singleton{
            public static final Singleton INSTANCE = new Singleton();
        & ......

Effective Java 学习笔记(5)

尽量复用对象,而不是创建新的对象,特别是当一个对象是immutable(不可改变)的时候。
如String对象,
String s= new String(“String”);   千万不要这样做,因为这里实际上创建了两个对象。
要避免出现这样的情况,
1是可以用静态工厂函数,来解决,如类库中的Boolean.valueOf(“true&rdqu ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号