易截截图软件、单文件、免安装、纯绿色、仅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多线程编程详解

一:理解多线程
多线程是这样一种机制,它允许在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间互相独立。
线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立的存储空间,而是和所属进程中的其它线程共享一个存储空间,这使得线程间的通信远较进程简单。 ......

Effective Java 学习笔记(9)

通常,有一类问题的产生都是由于没有重载hashCode这个方法. 当你重载equals后,hashCode必须重载,否则在使用HashMap, HashSet, Hashtable的时候,会出错.
对于hashCode有几个原则.
1. 不管什么时候调用hashCode,如果同一个对象与hashCode相关的字段没有修改的话,这个方法的返回值必须相同. 但不必和另一个应用程序中的值相等 ......

Java 中的内部静态类

Java 中内部动态类(没有static)关键字和内部静态类的就在于内部动态类不能定义静态变量或是静态方法,如果要在内部类中使用静态成员,必须将类声明为静态类.
内部类中的静态方法可以访问外部类的静态方法和本类中的静态方法或成员, 非静态方法可以访问其他所有的方法或成员 ......

Effective Java 学习笔记(5)

尽量复用对象,而不是创建新的对象,特别是当一个对象是immutable(不可改变)的时候。
如String对象,
String s= new String(“String”);   千万不要这样做,因为这里实际上创建了两个对象。
要避免出现这样的情况,
1是可以用静态工厂函数,来解决,如类库中的Boolean.valueOf(“true&rdqu ......

Effective Java 学习笔记 (6)

及时消除不使用的对象的引用, 理论上, 带有内存管理的语言是不存在内存泄漏的, 但是如果对对象的操作不当,也是可能会造成内存泄漏.
如有一个stack, 其pop函数如下.
public Object pop()
{
               if( Element.length() == 0) return nu ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号