知其然,知其所以然
Java 内部原理 2026-09-17

接口默认方法菱形冲突真实验证:不显式覆盖,编译器真实直接拒绝编译

真实复现类C实现两个互不相关的接口A和B、都定义了同名默认方法greet()却不覆盖时,javac真实拒绝编译并报错;真实验证用A.super.greet()语法可以显式调用指定接口的默认实现;真实验证接口存在真实父子关系时,更具体的子接口默认方法会自动胜出。

Java 接口 default方法 动画演示
Java 内部原理 2026-09-16

静态字段隐藏真实验证:字段访问真实按引用的声明类型决定,和方法多态完全不同

真实验证Parent p = new Child()时,p.label(静态字段)和p.instanceLabel(实例字段)真实都按引用的声明类型Parent决定;真实验证同样的p.describe()方法调用却真实按对象的运行时类型Child决定,证明Java字段访问不支持多态,只有方法调用才支持。

Java 继承 多态 动画演示
Java 内部原理 2026-09-15

多维数组内存真实验证:Java的二维数组真实是"数组的数组",不是连续内存块

真实验证Java的int[3][4]类型真实是[[I(数组的数组),不是C语言那种连续内存块;真实验证每一行都是独立的数组对象,可以整体替换成不同长度的新数组;真实计算1000x1000的二维数组真实创建了1001个独立数组对象,而等效的一维数组只创建1个。

Java 数组 JVM 动画演示
Java 内部原理 2026-09-14

TreeMap NavigableMap真实验证:floorKey和lowerKey在key存在时的真实差异

真实验证TreeMap的floorKey(<=)、ceilingKey(>=)、lowerKey(<)、higherKey(>)四个方法在key存在和不存在时的真实边界行为;真实验证乱序插入50/10/40/20/30后keySet()遍历顺序真实自动变成10/20/30/40/50,证明红黑树中序遍历天然有序。

Java 集合框架 TreeMap 动画演示
Java 内部原理 2026-09-13

List.remove() 重载真实验证:remove(20)真实删的是索引,不是值

真实验证List<Integer>.remove(int)会被编译器识别为remove(int index)重载而不是remove(Object),真实用remove(20)在只有4个元素的list上触发IndexOutOfBoundsException;真实验证唯一安全删除值的写法是显式装箱remove(Integer.valueOf(20))。

Java 集合框架 重载 动画演示
Java 内部原理 2026-09-12

String switch字节码真实反编译:两个hashCode相同的字符串,真的会靠equals()区分开

真实反编译String switch生成的字节码,证明它真实先对hashCode()做lookupswitch跳转,命中后再用equals()做二次校验;真实构造"Aa"和"BB"两个hashCode相同(都是2112)的字符串验证switch真实没有混淆它们。

Java 字节码 String 动画演示
Java 内部原理 2026-09-11

Double.toString() 真实验证:最短能往返解析回原值的算法,不是简单四舍五入

真实验证0.1+0.2的Double.toString()结果是0.30000000000000004,而不是完整二进制误差展开值;真实验证这个短串能被Double.parseDouble精确解析回同一个double;真实测出科学计数法切换阈值是1e7,不是常被记错的1e20/1e21边界。

Java 浮点数 String 动画演示
Java 内部原理 2026-09-10

EnumSet真实验证:反射读出内部真的是一个long类型的位向量

真实反射读取RegularEnumSet内部elements字段,证明5个枚举值的EnumSet真实用一个long的低5位存储;真实验证EnumMap遍历顺序真实按ordinal排序而不是插入顺序;真实实测2000万次contains()调用,EnumSet真实比HashSet快约4.7倍。

Java 枚举 集合框架 动画演示
Java 内部原理 2026-09-09

详细NPE消息真实验证:不加-g编译,字段名真实变成看不懂的local1

真实验证JEP358详细NullPointerException消息在JDK17默认开启,真实精确指出是哪个字段/数组元素/方法参数为null;但真实用默认javac编译(不带-g)时,变量名真实全部变成<local1>占位符,加-g重新编译后才真实显示出真正的源码变量名。

Java 异常 JEP358 动画演示
Java 内部原理 2026-09-08

String.format() 真实受Locale影响:同一段代码,德国和美国的机器真实打印不同结果

真实验证String.format("%,.2f", val)不传Locale时使用JVM默认Locale,真实对比US、GERMANY、FRANCE三种结果完全不同;真实验证德国格式化出的字符串直接用Double.parseDouble解析真实抛出NumberFormatException。

Java String Locale 动画演示
Java 内部原理 2026-09-07

HashMap并发扩容真实验证:8线程并发put,真实丢了将近1/3的数据

真实用8线程并发向同一个普通HashMap put 4万条不重叠key,5轮独立测试真实size均低于期望值40000,且全程真实没有抛出任何异常;对照组单线程顺序put真实size精确等于40000。

Java HashMap 并发 动画演示
Java 内部原理 2026-09-06

装箱缓存真实验证:Byte/Short/Long/Character缓存范围各不相同

真实验证Byte全范围(-128~127)缓存、Short/Long和Integer一样只缓存-128~127、Character只缓存0~127、Boolean只有两个值全缓存、Double/Float完全不缓存;真实反射读取各自缓存数组长度佐证。

Java 自动装箱 JVM 动画演示
京ICP备2026067502号-1京公网安备11010502063487号