You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Java的UUID#compareTo方法实现与RFC 4122规范不兼容?

概述

Java的UUID类实现了Comparable接口,但它实现的排序逻辑与RFC 4122给出的规范不兼容。
具体而言,它的排序结果与UUID字符串表示隐含的自然排序(uuid1.toString().compareTo(uuid2.toString()))不一致,而字符串排序逻辑是符合RFC要求的。


示例

你可以通过以下代码复现该问题:

UUID uuid1 = UUID.randomUUID();
UUID uuid2 = UUID.randomUUID();

Assert.assertEquals(
        Math.signum((int) uuid1.compareTo(uuid2)),
        Math.signum((int) uuid1.toString().compareTo(uuid2.toString())));

详情

目前绝大多数其他工具和编程语言的UUID排序逻辑都与RFC 4122规范兼容,只有Java的实现存在差异,这是主要问题。
实际使用中会遇到的问题:使用PostgreSQL 13对存储UUID的列排序,例如myColumnd::UUID或myColumnd::text(使用uuid_v4),得到的排序结果与Java的排序结果不一致。


内容的提问来源于stack exchange,提问作者Pedro Borges

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 16:36:03