为什么Integer的CompareTo不直接写x-y?

复习下Java8里的Integer类图, 我们按照这个结构来详解.

为什么Integer的CompareTo不直接写x-y?

1来自Comparable的方法

这个接口只有一个方法compareTo,不过用到了一个compare 但是实现很有意思.

compareTo & compare

public int compareTo(Integer anotherInteger) {
        return compare(this.value, anotherInteger.value);
}
public static int compare(int x, int y) {
    return (x < y) ? -1 : ((x == y) ? 0 : 1);
}

这玩意为什么这么复杂, 不是应该直接一个(x-y)就搞定了吗?Java的compareTo

  • 大于0是>,
  • 小于0是<,
  • 等于0是相等

这狗都知道啊, 直接写这个不行吗?

  public static int compare(int x, int y) {
        return x-y;
  }

2为什么不能直接写

因为大数-小数>0, 这是数学. 而计算机中的数字加减法,并不完全是数学.

计算机中的数字

  • +++++++,piaji, 最后会变成负数.
  • ——-, 咯噔,  最后会变成正数.

这个数轴是个圈,不是普通的直线.

因为int太大了, 空间有限,我们拿byte加减法来做下这个演示. 两个byte i,j=0, 一个++,一个–

为什么Integer的CompareTo不直接写x-y?

可以明显看到这是成环的.

如果放到圆形上, 看着更明显.画出来是这样的为什么Integer的CompareTo不直接写x-y?

按照二进制格式画是这样的为什么Integer的CompareTo不直接写x-y?

  • Integer.MIN_VALUE -1==Integer.MAX_VALUE
  • Integer.MAX_VALUE +1==Integer.MIN_VALUE
要是写了 x-y, 很可能会发生错误.

3总结

这篇就是这么水, 没了. 我来展示图的,画圆圈的能力好像上去一点点.最近比较忙, 都没时间玩儿这个了.



原文始发于微信公众号(K字的研究):为什么Integer的CompareTo不直接写x-y?

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/24838.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!