一.介绍

Object类是类层次结构的根源,每一个类都存在一个父类为Object类。所有的对象,包括数组,都实现了 Object 类的方法。

二.对象初始化

这里使用了静态代码块进行Object类的初始化,可以看到初始化调用的是一个私有的(private) 本地的(native) 静态(static)方法。Object类的静态代码块只会在第一次加载Object类的时候进行调用,且只调用一次。由于Object类是所有类的父类,所以可能是由其他类的初始化引起的Object类的初始化。从方法名 registerNatives 中可以看出该方法的作用是用来进行本地方法(native method)的注册,本地方法(native method) 一般是封装在JDK里,用 C/C++ 编写的模块,文件格式为 *.dll。

三.常用方法

1). public final native Class<?> getClass();

该方法用于返回代表当前对象的运行时的类(runtime class)的对象(Class类对象)。getClass() 返回的对象在这个运行时的类(runtime class)的静态互斥块(static synchronized) 中会被锁住。对于 Class<? extends |X|>, 在调用 getClass() 时,|X| 是会被擦除的部分,也不需要进行类型转换。jdk中给出了一个代码例子,我们自己手动写一个关于 Number 类的demo:

     public static void main(String[] args) {
Number n1 = 2;
Class<? extends Number> c1 = n1.getClass();
System.out.println(c1); //class java.lang.Integer Number n2 = 2.1;
Class<? extends Number> c2 = n2.getClass();
System.out.println(c2); //class java.lang.Double Number n3 = 2L;
Class<? extends Number> c3 = n3.getClass();
System.out.println(c3); //class java.lang.Long
}

2). public final native int hashCode();

该方法用于返回对象的哈希值,用于哈希表(例如 java.util.HashMap、java.util.Hashtable 等) 中哈希值的计算。如果一个类作为哈希表的存储类型,一般会重写 Object 类的 hashCode() 方法。hashCode() 有以下几个特点:

  • 一个相同的对象,不管在任何时候被调用多少次,hashCode() 都会返回相同的整型值,hashCode() 的返回值无法用于在 equals() 中判断对象是否变更 (对象变更后 equals() 可能不一致,hashCode() 可能保持一致)。对于不同的应用,这个哈希值不需要一致。
  • 如果两个对象的 equals() 的结果为 true, 那么两个对象的 hashCode() 方法应该返回相同的值。( 面试笔试常考 )
  • 如果两个对象的 equals() 的结果为 false, 两个对象的 hashCode() 不一定要返回不同的值。然而,对于不同的对象,程序编写者应该尽可能使 hashCode() 返回不同的值,从而提高哈希表的性能。 哈希表的查找效率为 O(1),减少哈希冲突可以提高查找速度,从而提高哈希表的性能。( 面试笔试常考 )
  • Object 类中 hashCode() 的返回值为对象的内部存储地址,所以在没有重写 hashCode() 的情况下, 不同的对象必然会返回不同的哈希值。

3). public boolean equals(Object obj);

该方法用于判断两个对象是否相等(if one is equal to another)。 equals() 方法具有以下特点:

  • 自反性( reflexive):对于任何非空的引用值 x,x.equals(x) 应该返回 true.
  • 对称性( symmetric):对于任何非空的引用值 x 和 y,x.equals(y) 和 y.equals(x) 应该返回相同的结果.
  • 可递性( transitive ):对于任何非空的引用值 x 、y、z,如果 x.equals(y) 和 y.equals(z) 返回 true, 那么 x.equals(z) 应该返回 true.
  • 一致性( consistent ) :对于任何非空的引用值 x 和 y,多次调用 x.equals(y) 应该返回相同的值,要么为 true, 要么为 false.
  • 对于任何非空的引用值 x, x.equals(null)  应该返回 false.
  • Object 类中的 equals() 判断两个引用是否指向同一个对象,若指向同一个对象,则返回 true, 反之则返回 false.
  • 当重写 equals() 的时候,有必要重写 hashCode(). 注意保持:  equals() 为 true,则 hashCode() 返回相同的值.

4). public String toString();

该方法用于返回能代表该对象的字符串, Object 类的 toString() 方法返回该对象的类名 + 对象哈希值的十六进制表示.

最新文章

  1. Android自定义控件之自定义ViewGroup实现标签云
  2. 通过颜色代码初始化UIColor
  3. iOS开发 百度坐标转火星坐标
  4. 分布式日志1 用c#的队列写日志
  5. POJ3974 Palindrome (manacher算法)
  6. hdu 4665
  7. 【UVA272】TEX Quotes
  8. aws上redhat安装redis服务记
  9. Java体系学习书籍推荐
  10. 数据文件实时同步(rsync + sersync2)
  11. Django---路由、配置和静态文件简介
  12. C#深度学习の委托深度解析
  13. ToolBar+Drawable实现一个好用的侧滑栏(侧边栏)和工具栏
  14. 32-Python3 MySQL(mysql-connector)
  15. codeoforces 975B Mancala
  16. 第一次使用autohotkey的记录
  17. 使用 IntraWeb (26) - 基本控件之 TIWMenu
  18. hadoop safemode error
  19. 细节之strcat
  20. Object.defineProperty 监听对象属性变化

热门文章

  1. OpenStack二三事(2)
  2. #HDU 3790 最短路径问题 【Dijkstra入门题】
  3. 百度开放云java+tomcat部署web项目-小皇帝詹姆斯
  4. 记录 mysql sql limit 0,100问题
  5. 使用自定义的AlertDialog。
  6. hdu 4123(树形dp+倍增)
  7. bzoj1407
  8. bzoj2179
  9. PCB CAM自动化程序协同业务流
  10. 最大正方形 同luogu1387