感觉之前对java的了解不够深入,所以往后会不定期的阅读java源码来提升对java语言的理解。

我对java源码阅读的计划路线是:

1.java工具类,java.util里的类的源码,如下图,这些类中可能还涉及到一些算法,例如排序算法等

2.然后是core包,也就是String、StringBuffer等。

3.Java IO 包,是对继承和接口运用得最优雅的案例。

4.java虚拟机,jvm的源码。

java源代码结构 java源代码分析_内存地址

首先从java工具类开始:

1.Objects类(静态工具类)

首先是Objects类不是Object,Objects是final类,final类不可被继承,final类中的方法都隐式的是final方法。

Objects的构造函数是私有的,所以不能被实例化。

第一个方法:

public static boolean equals(Object a, Object b) {
    return (a == b) || (a != null && a.equals(b));
}

首先==判断的是对象的内存地址,如果对象内存地址一样则直接返回true。如果对象地址不同,则a.equlas调用了Object的equlas方法。对于基本类型和引用类型可以有自己的实现方法,例如Double会比较数据类型是否一致等。(所以这里||前后的两个条件都是有用的!)

第二个方法:

public static boolean deepEquals(Object a, Object b) {
    if (a == b)
        return true;
    else if (a == null || b == null)
        return false;
    else
        return Arrays.deepEquals0(a, b);
}

和deepEquals区别在于如果有一个对象是null则返回false,同时增加了对数组对象的判断。