Java 长比较

Java Long Comparison

简介:我在Android中有一个方法可以做长比较。基本上,我比较日期 (timestamps/epochs)。其中一项比较检查日期是否相等 "if (a2 == a1 && b2 == b1)".

问题:问题是即使这些数字相等,"if" 也不起作用。我还附上了调试屏幕的屏幕截图,其中包含示例中比较的值。

问题:您知道为什么条件不起作用吗?我想不通,因为这只是数学应该起作用。也许存在我没有看到的铸造问题?所有其他情况 "if" 有效。

方法:

public ArrayList<Integer> getConflicts(ArrayList<AssetBooking> assetBookings) {

        Epoch epoch = new Epoch();
        ArrayList<Integer> conflicts = new ArrayList<>();

        for (AssetBooking aB : assetBookings) {

            Long a1 = aB.getFromDatetime() / 1000;
            Long b1 = aB.getToDatetime() / 1000;

            Long a2 = epoch.getEpochNoSeconds(fromDatetime);
            Long b2 = epoch.getEpochNoSeconds(toDatetime);

            if (a2 == a1 && b2 == b1) {
                System.out.println("equals");
            }

            if ((a2 < a1 && b2 >= a1) || (a2 == a1) || (a2 > a1 && b2 < b1) || (a2 > a1 && a2 < b1) || (a2 == a1 && b2 == b1)) {
                conflicts.add(assetBookings.indexOf(aB));
            }

        }

        return conflicts;

    }

截图

Long 是一个对象。如果你输入 a1 == a2 你检查 a1 是否是 a2 - 相同的对象,而不是相同的值。如果你想比较它,你必须写 a1.equals(a2) - 如 String.

如果您真的不需要 Long,请使用 long - 它会更容易并且更有效

试试这个:

long a1,a2;
long b1,b2;

if (a2.equals(a1) && b2.equals(b1)) {

}