感觉之前对java的了解不够深入,所以往后会不定期的阅读java源码来提升对java语言的理解。
我对java源码阅读的计划路线是:
1.java工具类,java.util里的类的源码,如下图,这些类中可能还涉及到一些算法,例如排序算法等
2.然后是core包,也就是String、StringBuffer等。
3.Java IO 包,是对继承和接口运用得最优雅的案例。
4.java虚拟机,jvm的源码。
首先从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,同时增加了对数组对象的判断。