-
子线程崩溃导致应用无响应,因其静默退出使依赖状态未更新、回调未发出、资源未释放;setUncaughtExceptionHandler仅对调用它的线程实例生效,须在start()前设置,且不可捕获主线程异常。
-
Collections.singletonMap()返回不可变Map,所有修改操作(如put、remove)均抛UnsupportedOperationException;它接受null键值,而Java9+的Map.of()禁止null,且二者实现与序列化特性不同。
-
String.join比StringBuilder更适合简单拼接,因其语义清晰、代码简洁、自动处理空集合返回"",但不跳过null或空字符串,仅适用于纯字符串+固定分隔符场景。
-
本文介绍在SpringBoot项目中基于Log4j2实现“每个类输出到专属日志文件”的完整方案,涵盖Logger初始化规范、log4j2.xml配置要点,并提供可运行示例与关键注意事项。
-
只定义getter无法实现真正不可变性,因反射可修改私有字段、getter返回可变对象引用会导致外部篡改、序列化/JSON反序列化可能绕过getter直接赋值。
-
使用BigDecimal可避免浮点精度问题,推荐字符串构造如newBigDecimal("0.1"),运算通过add、subtract等方法实现,除法需指定精度和舍入模式,比较应使用compareTo而非equals或==。
-
最安全通用的方式是用Collection.toArray(T[])方法;无参toArray()返回Object[],强转泛型数组会因泛型擦除和JVM类型检查导致ClassCastException,正确写法为list.toArray(newString[0])。
-
G1字符串去重由-XX:+UseStringDeduplication实现,仅作用于老年代中内容相同的byte[]/char[],StringTable不参与去重;jcmdVM.stringtable仅显示intern引用元信息,无法反映去重效果,需通过PrintStringDeduplicationStatistics日志确认。
-
codePointAt()能正确获取增补字符的Unicode码点,而charCodeAt()在遇到代理对时仅返回高代理值;codePointAt()自动处理代理对计算,且索引指向UTF-16单元而非用户感知字符位置。
-
默认equals()只比较引用,需重写并同步重写hashCode();Lombok@EqualsAndHashCode有字段限制和继承陷阱;Objects.equals防null更安全;record自动生成但依赖字段类型正确实现equals()。
-
调用window.print()可触发浏览器原生打印对话框,需配合@mediaprintCSS隐藏非关键元素、优化布局适配A4尺寸,并利用onafterprint增强交互体验。
-
BigDecimal.scaleByPowerOfTen()仅执行十进制小数点位移(×10ⁿ),不处理物理单位换算;KB→GB需按1024²或1000²系数显式除法,不可直接调用该方法。
-
浅拷贝只复制顶层结构,嵌套对象共享引用;深拷贝递归复制所有层级,完全独立互不影响。核心差异在于是否切断引用链,浅拷贝修改嵌套内容会同步影响原对象,深拷贝则不会。
-
skip()实际跳过字节数可能小于请求值,需循环调用并校验返回值;推荐用FileChannel.position()替代,避免字符边界和性能问题。
-
Scanner类配合IO流可高效解析结构化文本,需选择合适数据源、设置分隔符、预判类型并处理边界;支持字符串和文件输入,推荐try-with-resources管理资源,灵活配置正则分隔符,安全读取需配合hasNextXxx()及缓冲清理。