知其然,知其所以然
Java 内部原理 2026-07-26

equals() 契约真实验证:对称性被打破后,List.contains() 真实给出矛盾答案

真实构造一个违反对称性的equals实现,真实验证cis.equals(s)和s.equals(cis)给出不同结果,进而真实导致List.contains()因参数顺序不同给出矛盾答案;真实复现经典的Point/ColorPoint传递性问题:p1=cp1、p1=cp2,但cp1≠cp2。

Java equals 契约 动画演示
Java 内部原理 2026-07-25

数组 clone() 真实验证:二维数组只深拷贝第一层

真实验证一维基本类型数组的clone()是完整的值拷贝;真实验证一维对象数组的clone()只拷贝元素引用;真实验证二维数组的clone()只深拷贝了最外层,内层数组依然真实是共享引用,必须手动逐行clone()才能得到真正独立的二维数组。

Java 数组 clone 动画演示
Java 内部原理 2026-07-24

this 逃逸真实验证:200轮测试全部看到未初始化完成的对象状态

真实在构造函数里把this赋给一个静态字段发布出去,真实起观察者线程自旋等待这个字段非null后立即读取一个未加volatile的字段,200轮真实测试全部200次都读到了默认值0;真实对照安全发布方式,200轮测试真实零次看到未初始化状态。

Java 并发 内存可见性 动画演示
Java 内部原理 2026-07-23

静态初始化顺序真实验证:父类静态块永远先于子类,只执行一次

真实记录 Parent/Child 两层继承链创建两个实例的完整14步真实执行顺序:静态代码块和静态字段初始化真实只在类第一次被使用时执行一次,且父类的静态初始化真实永远先于子类;实例初始化块和构造器真实每次new都会重新执行一遍。

Java 类加载 初始化 动画演示
Java 内部原理 2026-07-22

字段隐藏真实验证:字段访问没有多态,方法调用才有

真实验证同一个Dog对象,用Animal引用和Dog引用分别访问同名字段type,得到真实不同的结果;但调用同名方法getType()两个引用真实得到相同结果;真实用反射证明父类和子类同名字段是两个完全独立的Field对象,不是被覆盖。

Java 多态 继承 动画演示
Java 内部原理 2026-07-21

异常链真实验证:getCause() 和 initCause() 的真实约束

真实验证用构造器传入cause包装异常后,e.getCause()真实拿到原始异常;真实验证initCause()事后设置cause的效果和构造器传入完全一致,但真实只能调用一次,第二次调用会真实抛出IllegalStateException;真实验证printStackTrace()的Caused by:标记。

Java 异常 异常链 动画演示
Java 内部原理 2026-07-20

switch 穿透真实复现:忘记 break 导致的静默逻辑 bug

真实复现忘记写break导致case穿透:case 1 真实执行了case 1和case 2两段代码,没有任何编译错误也没有运行时异常;真实验证case穿透合法用法;真实验证switch匹配失败时会直接跳到default标签开始执行,不会经过前面任何case。

Java switch 陷阱 动画演示
Java 内部原理 2026-07-19

数组默认值真实验证:char数组的默认值不是'0',是空字符

真实验证 int[]/boolean[]/double[]/Object[] 每个元素都真实有确定的默认值;真实验证char数组的默认值是Unicode空字符,数值上是0不是字符'0';真实验证多维数组只分配外层时内层真实是null,访问会真实抛出NullPointerException。

Java 数组 基础 动画演示
Java 内部原理 2026-07-18

浮点数精度真实验证:NaN不等于自己,但Double.equals()说它等于

真实验证 nan == nan 是false,但装箱成Double后equals()真实认为NaN等于自己;真实验证0.0和-0.0用==比较真实相等,但装箱后equals()和compareTo()真实认为它们不相等;真实验证1.0/0.0和1.0/-0.0结果真实不同。

Java 浮点数 IEEE754 动画演示
Java 内部原理 2026-07-17

StackOverflowError 真实验证:栈帧数被隐藏上限掩盖的真相

真实用getStackTrace().length统计递归深度,却发现无论局部变量多少都真实卡在1024;真实定位到原因是JVM默认-XX:MaxJavaStackTraceDepth=1024截断了堆栈跟踪;调高后真实测出默认栈能递归4.4万层,重栈帧版本真实只能到1.3万层。

Java 栈 JVM参数 动画演示
Java 内部原理 2026-07-16

VarHandle 原子操作真实验证:8线程CAS自增80万次真实无一丢失

真实用 MethodHandles.lookup().findVarHandle() 拿到字段的 VarHandle,真实验证 compareAndSet() 成功/失败两种结果和 getAndAdd() 的原子读改写语义;真实起8个线程各自CAS自增10万次,真实最终值精确等于80万,和 AtomicInteger 对照组结果完全一致。

Java 并发 VarHandle 动画演示
Java 内部原理 2026-07-15

instanceof 模式匹配真实验证:模式变量的作用域到底延伸到哪

真实验证 instanceof 模式匹配绑定出的变量在 && 右侧真实可用;真实验证取反场景里,不匹配分支提前return后,后续代码真实都能访问到这个模式变量,因为编译器能通过控制流分析确定此时类型一定匹配。

Java instanceof 语法 动画演示
京ICP备2026067502号-1京公网安备11010502063487号