第三章所有对象的通用方法

2020-03-11  本文已影响0人  后来丶_a24d

目录


所有对象的通用方法

重写equals方法时遵守通用约定

  1. 自反性:对于非null对象x,有x.equals(x) == true.
  2. 对称性:在x.equals(y)为true的同时必须y.equals(x)也为true
  3. 传递性:x.equals(y),y.equals(z)都为true,则x.equals(z)为true
  4. 一致性:如果x.equals(y)为true,那么在x,y被修改之前,x.equals(y)一直为true。也就是说对于不可变对象x,y,x.equals(y)结果始终一致。eg: 一个url如果只判断url的字符串是否相等那是可靠的,但是如果要先通过url获取资源在判断是否相等那就是不可靠的。
  5. 非空性:所有对象必须不能和null相等。
  1. 类不需要提供一个“逻辑相等(logical equality)”的测试功能
  2. 类是私有的或包级私有的,可以确定它的equals方法永远不会被调用。

重写equals方法时同时也要重写hashcode方法

Object 规范,以下为具体约定:

始终重写 toString 方法

谨慎地重写 clone 方法

 public Object clone() {
        try {
            ArrayList<?> v = (ArrayList<?>) super.clone();
            v.elementData = Arrays.copyOf(elementData, size);
            v.modCount = 0;
            return v;
        } catch (CloneNotSupportedException e) {
            // this shouldn't happen, since we are Cloneable
            throw new InternalError(e);
        }
    }

考虑实现Comparable接口


参考文章

上一篇 下一篇

猜你喜欢

热点阅读