-
ArrayList和LinkedList允许存null但易致NPE;HashMap允一个nullkey和任意nullvalue,ConcurrentHashMap禁止nullkey/value;TreeSet/TreeMap不接受null;Optional.of(null)立即抛异常,须用ofNullable。
-
Collections.copy()用于将源列表元素复制到已有目标列表中,要求目标列表长度≥源列表。示例中通过预填充默认值确保容量,调用copy后完成覆盖复制。常见错误包括目标列表长度不足或未初始化,会抛出IndexOutOfBoundsException或NullPointerException。注意其与addAll()区别:copy是替换原有元素位置,不改变结构;addAll是追加元素,增加长度。需提前设置目标列表大小,可用Collections.nCopies初始化。该方法适用于复用列表对象的场景,
-
LockSupport.park()不阻塞是因为其依赖线程的permit状态:若此前已调用unpark(),permit存在则park()直接返回;多次unpark仅保留一个permit,且不保证唤醒顺序或内存可见性。
-
final类不能被继承,用于保障安全性、不可变性及性能优化。如String类防止篡改,不可变类确保状态固定,JVM可对final类方法内联优化,工具类通过final明确禁止扩展意图。
-
Scanner可通过useDelimiter()方法用正则表达式自定义分隔符,需注意双重转义、空token处理及nextXXX()的类型校验;推荐先用next()获取字符串再手动解析。
-
DTO是专用于层间数据传输的精简无逻辑POJO,本质区别在于其明确职责:仅含必要字段且禁止业务方法;而POJO是泛称,无功能约束。
-
try-finally用于确保关键操作(如资源清理)无论是否发生异常都执行,finally在try退出时无条件运行,但System.exit()或JVM强制终止时除外;推荐优先使用try-with-resources。
-
Arrays.sort不能直接对任意对象数组排序,必须让对象实现Comparable接口或传入Comparator,否则抛ClassCastException;未实现Comparable时可用Comparator灵活定制排序规则,如按金额降序:Arrays.sort(orders,(a,b)->Double.compare(b.amount,a.amount))。
-
URL类用于表示和操作URL,专注地址解析、构造与标准化,不发送请求;可拆解协议、主机等字段,支持相对路径解析和自动编码,通过openConnection()配合URLConnection发起请求,但不可变且功能基础。
-
方法引用不能替代反射调用静态方法,它是编译期绑定的函数式语法糖,与运行时反射机制本质不同;强行混用会导致类型不兼容和编译错误,真正提升可读性的是优先使用方法引用而非反射。
-
Stream.dropWhile()是Java9引入的方法,用于跳过流开头连续满足谓词的元素,保留首个不满足条件的元素及后续所有元素,仅适用于有序串行流。
-
加了serialVersionUID仍报InvalidClassException是因为JVM比对的是其字面值,若未显式声明则自动生成,类结构微调会导致默认值变化;应统一用1L并按兼容性规则递增。
-
Java异常提示需区分类型映射友好文案,未知异常用traceID兜底并记录日志,禁止直接展示原始消息;服务端决定提示内容,客户端负责渲染,二者解耦。
-
强制类型转换是截断源头,应规避强转、控制精度、显式校验、分层拦截:一、数据清洗层用正则归一化+多格式解析;二、数值层用字符串构造BigDecimal并显式取整;三、对接层用Math.toIntExact()加死信兜底。
-
Arrays.binarySearch要求数组必须已升序排序,否则结果不可预测;因其依赖有序性进行区间收缩,乱序时中点值无法提供正确方向,导致查找失败或返回错误索引。