如果没有明确指出超类, 那么 Object 是他的超类.
5.2.1 Object 类型的变量
只有基本类型不是对象:
- 数值
- 字符
- 布尔
数组是对象.
5.2.2 equals 方法
Object 的 equals 方法比较的是对象的引用是否相等.
- 经常做 equals 的其实是比较两个对象的状态是否相等

防备 name 或 hireDay 为 null:

子类的 equals 实现:

5.2.3 相等测试与继承
Java 要求 equals:

相等测试的问题:


编写完美 equals 的建议:


使用注解与编译器对话, 比如使用 **@Override** 告诉编译器重写方法, 避免无意间定义新方法.
5.2.4 hashCode 方法
String 类计算 hashCode 的算法:
int hash = 0;for (int i = 0; i < length(); i++) {hash = 31 * hash + charAt(i);}
- Object.hashCode() 是根据对象地址算出的
- 如果重写 equals(), 那么必须重写 hashCode()
- hashCode 是整数 (有负的情况)

- 安全的 hashCode 方法: Objects.hashCode()
- null 对象返回0
- 使用 Double.hashCode 来避免 Double 对象
- 简便的 hashCode() 实现:

- 如果 x.equals(y) 返回 true, 那么 x.hashCode() 与 y.hashCode() 相等
5.2.5 toString 方法
大多数 toString 遵循的格式:
- 类名
- 方括号括起来的字段值

如果对象实现了 toString(), 那么可以用 + 拼接.
强烈建议为自定义类添加 toString()
