2025-12-21 Java中的版本号排序陷阱:为何不能用BigDecimal,如何正确实现? Java中的版本号排序陷阱:为何不能用BigDecimal,如何正确实现? 正文: 在软件开发中,版本号的排序是个高频需求。无论是管理依赖库的升级,还是控制产品功能的发布流程,都需要对形如1.2.3、2.10.5-rc这样的版本字符串进行正确排序。许多开发者第一反应可能是使用BigDecimal或直接按字典序排序,但这往往会导致令人费解的排序结果。经典陷阱:字典序与数值序的冲突尝试用以下代码排序常见的版本号:List<String> versions = Arrays.asList("1.2", "1.10", "1.9", "2.0"); Collections.sort(versions); System.out.println(versions); // 输出:[1.10, 1.2, 1.9, 2.0]字典序会将"1.10"排在"1.2"之前,因为字符'1'(ASCII值49)小于'2'(ASCII值50)。这显然不符合人类对版本号的认知——我们期望1.2 < 1.9 < 1.10 < 2.0。更隐蔽的陷阱是使用BigDecimal:List<String> versions = Arrays.asList... 2025年12月21日 34 阅读 0 评论