真实复现类C实现两个互不相关的接口A和B、都定义了同名默认方法greet()却不覆盖时,javac真实拒绝编译并报错;真实验证用A.super.greet()语法可以显式调用指定接口的默认实现;真实验证接口存在真实父子关系时,更具体的子接口默认方法会自动胜出。
真实验证Parent p = new Child()时,p.label(静态字段)和p.instanceLabel(实例字段)真实都按引用的声明类型Parent决定;真实验证同样的p.describe()方法调用却真实按对象的运行时类型Child决定,证明Java字段访问不支持多态,只有方法调用才支持。
真实验证Java的int[3][4]类型真实是[[I(数组的数组),不是C语言那种连续内存块;真实验证每一行都是独立的数组对象,可以整体替换成不同长度的新数组;真实计算1000x1000的二维数组真实创建了1001个独立数组对象,而等效的一维数组只创建1个。
真实验证TreeMap的floorKey(<=)、ceilingKey(>=)、lowerKey(<)、higherKey(>)四个方法在key存在和不存在时的真实边界行为;真实验证乱序插入50/10/40/20/30后keySet()遍历顺序真实自动变成10/20/30/40/50,证明红黑树中序遍历天然有序。
真实验证List<Integer>.remove(int)会被编译器识别为remove(int index)重载而不是remove(Object),真实用remove(20)在只有4个元素的list上触发IndexOutOfBoundsException;真实验证唯一安全删除值的写法是显式装箱remove(Integer.valueOf(20))。
真实反编译String switch生成的字节码,证明它真实先对hashCode()做lookupswitch跳转,命中后再用equals()做二次校验;真实构造"Aa"和"BB"两个hashCode相同(都是2112)的字符串验证switch真实没有混淆它们。
真实验证0.1+0.2的Double.toString()结果是0.30000000000000004,而不是完整二进制误差展开值;真实验证这个短串能被Double.parseDouble精确解析回同一个double;真实测出科学计数法切换阈值是1e7,不是常被记错的1e20/1e21边界。
真实反射读取RegularEnumSet内部elements字段,证明5个枚举值的EnumSet真实用一个long的低5位存储;真实验证EnumMap遍历顺序真实按ordinal排序而不是插入顺序;真实实测2000万次contains()调用,EnumSet真实比HashSet快约4.7倍。
真实验证JEP358详细NullPointerException消息在JDK17默认开启,真实精确指出是哪个字段/数组元素/方法参数为null;但真实用默认javac编译(不带-g)时,变量名真实全部变成<local1>占位符,加-g重新编译后才真实显示出真正的源码变量名。
真实验证String.format("%,.2f", val)不传Locale时使用JVM默认Locale,真实对比US、GERMANY、FRANCE三种结果完全不同;真实验证德国格式化出的字符串直接用Double.parseDouble解析真实抛出NumberFormatException。
真实用8线程并发向同一个普通HashMap put 4万条不重叠key,5轮独立测试真实size均低于期望值40000,且全程真实没有抛出任何异常;对照组单线程顺序put真实size精确等于40000。
真实验证Byte全范围(-128~127)缓存、Short/Long和Integer一样只缓存-128~127、Character只缓存0~127、Boolean只有两个值全缓存、Double/Float完全不缓存;真实反射读取各自缓存数组长度佐证。