compareTo的源码

今天心血来潮看了一下 integer的 compareTo 的源码 发现 最后 他会归到一列

 return (x < y) ? -1 : ((x == y) ? 0 : 1);

这样的一个比较

然后又看了一下 LocalDateTime的比较 ps(这个类型比较 必须用"yyyy-MM-dd HH:mm:ss.S" 这个格式)

 if (other instanceof LocalDateTime) {
            return compareTo0((LocalDateTime) other);
        }
        return ChronoLocalDateTime.super.compareTo(other);

会再次转化为LocalDateTime 这个对象
用这个对象ChronoLocalDateTime 来进行比较 我看 代码中的解释是 官方鼓励鼓励使用LocalDateTime而不是此接口,即使在应用程序需要处理多个日历系统的情况下也是如此。
也没懂这个为什么要这样要求。

int cmp = toLocalDate().compareTo(other.toLocalDate());
        if (cmp == 0) {
            cmp = toLocalTime().compareTo(other.toLocalTime());
            if (cmp == 0) {
                cmp = getChronology().compareTo(other.getChronology());
            }
        }
        return cmp;

然后 就进入到了 这个里面
toLocalDate() 返回与该日期时间相同的年,月和日的本地日期。
toLocalTime() 与该日期时间相同的小时,分钟,秒和纳秒的本地时间。
就是先比较 年月日 不能比较的话 在比较 时分秒以及纳秒

 int cmp = Long.compare(toEpochDay(), other.toEpochDay());
        if (cmp == 0) {
            cmp = getChronology().compareTo(other.getChronology());
        }
        return cmp;

比较 年月日时分秒时 都是转化为 long的 比较了 而long的话 和integer的比较相差不大 准确的说 一样的 毕竟都是数字比较

如果这样还不行的话 那就使用下面的方法了
getChronology() 获取此日期时间的时间顺序。
年表代表正在使用的日历系统。 ChronoField中的纪元和其他字段由年表定义。
这个 应该就是显示的你本地时区了 应该就是根据时区比较了。
在这里插入图片描述
因为 咳咳 我不知道其他时区的就显示一下 这边的输出结果吧 都是iso

    int len1 = value.length;
        int len2 = anotherString.value.length;
        int lim = Math.min(len1, len2);
        char v1[] = value;
        char v2[] = anotherString.value;

        int k = 0;
        while (k < lim) {
            char c1 = v1[k];
            char c2 = v2[k];
            if (c1 != c2) {
                return c1 - c2;
            }
            k++;
        }
        return len1 - len2;

这就是 最后的最后了 哈哈 最终 他就回到了 string 字符串比较的 方法中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值