gpt4 book ai didi

java - 为什么 UUID#compareTo 与 RFC 4122 不兼容?

转载 作者:行者123 更新时间:2023-12-04 14:35:12 25 4
gpt4 key购买 nike

概述
Java UUID类实现 Comparable .但是它实现的顺序似乎与 RFC 4122 中给出的规范不兼容。 .
特别是,它与其字符串表示( 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())));

细节
我的主要问题是几乎所有其他工具和语言似乎都与 RFC 4122 一致并兼容。 ,但 Java 不是。
在我的特殊情况下,我使用 PostgreSQL 13 并按包含 UUID 的列排序,例如 myColumnd::UUIDmyColumnd::text (使用 uuid_v4 ),但我由此获得的顺序与使用 Java 获得的顺序不同。

最佳答案

好吧,在一种情况下,您比较 UUID,在另一种情况下,按词法顺序比较两个字符串。
根据 Javadoc:

The first of two UUIDs is greater than the second if the most significant field in which the UUIDs differ is greater for the first UUID.

关于java - 为什么 UUID#compareTo 与 RFC 4122 不兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69815008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com