日常 - 真随笔

对于 JDK 源码的一些误解

这是一篇小记录,起因是看到 Arrays 源码产生的不理解。

/**
 * @since  1.2
 */
public class Arrays {
    public static void sort(int[] a) {
        DualPivotQuicksort.sort(a, 0, a.length - 1, null, 0, 0);
    }
}

/**
 * @since 1.7
 */
final class DualPivotQuicksort {
}

Arrays 内部源码居然是后来才写的,让我感到疑惑,后来想明白了,误解之处在于:一直认为 JDK 源码包内容是不能修改的;其实应该这么理解,Java 不会废除原有的特性

像 Python 2.x 到 Python 3.x 那种不兼容问题在 Java 中不能出现,Java 具有向前兼容的特性,对于一些已有的特性,但是不是很好用的,最多也只是添加 @Deprecated 注解不建议使用。但是可没有说源码不可以修改,最佳的例子就是 HashMap 1.7 和 1.8 版本之间的跨度,代码从 1000+ 改到 2000+。

Java 语言增加的新特性不会影响原有的特性,就是向前兼容,如同 Interface 中添加的 default 方法。

public interface InterfaceTest01 {
    void fun1();

    default void fun2() {

    }
    
}

随笔

这篇是自己的一些小结,很多细节没有考证过,如有疏漏请指正为感。

posted @ 2019-11-20 12:39  学习趁早  阅读(134)  评论(0编辑  收藏  举报