天天看点

Java 中Object类中方法

Object类是所有类的最终父类,其内部封装了一些方法,之前了解不够,专门总结如下。

1. hashCode()

此方法通过哈希映射,通过对象的相关信息(对象存储物理地址,字段信息等)映射为一个数值,这个数值称之为散列值。

这个散列值通常同于在集合中对象的重复性检查,因为集合中不允许出现重复的对象,所以再添加前通常要检查集合内是否已存在对象,一种方案是通过equals,与集合中元素逐个比较,但当集合中元素过多时,这种方案会非常影响系统运行效率,其实集合中内置了一个table,其中保存了集合中所有对象的hashCode()值,如果hashCode值相等后再调用equals()进行比较,这种方案的效率会远高于直接使用equals();

hashCode()方法的重写

hashCode()方法允许重写,但是重写的方法需满足以下要求

  1. 在程序运行过程中,同一个对象多次调用hashCode()方法应该返回相同的值。
  2. 当两个对象通过equals()方法比较返回true时,则两个对象的hashCode()方法返回相等的值。
  3. 对象用作equals()方法比较标准的Field,都应该用来计算hashCode值。

2. clone()

此方法快速生成已有对象的副本,这是一个native方法(用C++写的),native方法执行效率高于Java内的方法,所以在复制一个对象一般采用clone()方法,而不是new一个对象,再将对象的值写入

3. finalize()

垃圾回收器准备释放内存的时候,会先调用finalize()。

  1. 对象不一定会被回收。
  2. 垃圾回收不是析构函数。
  3. 垃圾回收只与内存有关。
  4. 垃圾回收和finalize()都是靠不住的,只要JVM还没有快到耗尽内存的地步,它是不会浪费时间进行垃圾回收的。