gpt4 book ai didi

java - Compare和compareTo的负返回值和正返回值

转载 作者:行者123 更新时间:2023-12-01 08:00:33 30 4
gpt4 key购买 nike

我读到这些方法的返回值的规则是,以 obj1.compareTo(obj2) 为例,如果 obj2 在层次结构中位于 obj1 之下,则返回值为,并且如果它位于 obj1 之上,则为(如果相等则为 0)。然而,在我的类里面,我看到了使用 Math.signum 来在 CompareTo 方法中获得 -1(负数)和 1(正数)的示例。

这有什么理由吗?

<小时/>

编辑:

这是我的意思的代码:

Comparator comp = new Comparator() {
public int compare(Object obj1, Object obj2) {
Book book1 = (Book) obj1;
Book book2 = (Book) obj2;

int order = book1.getAuthor().compareTo(book2.getAuthor());
if (order == 0) {
order = (int) Math.signum(book1.getPrice() - book2.getPrice());
}
return order;
};

最佳答案

使用Math.signum有什么理由

是的有。

order = (int) Math.signum(book1.getPrice() - book2.getPrice());

假设您已将上面的行替换为此行

order = (int)(book1.getPrice() - book2.getPrice());

现在让我们假设

book1.getPrice() returns 10.50 
book2.getPrice() returns 10.40

如果您不使用signum,您将永远不会出现任何编译时或运行时错误,但order的值将为0。这意味着book1等于book2这在逻辑上是错误的。

但是如果您使用signumorder 的值将为 1,这意味着 book1 > book2。

但必须提到的是,您永远不应该对比较函数返回的值在 1 和 -1 之间做出任何假设。比较器可以阅读官方文档http://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html

关于java - Compare和compareTo的负返回值和正返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25556961/

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