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

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.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