2017-04-25 80 views
-2

介绍:我有一个在Android做长时间比较的方法。基本上,我比较日期(时间戳/时代)。其中一个比较检查日期是否相等“if(a2 == a1 & & b2 == b1)”。Java长期比较

问题问题是,即使这些数字相同,“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; 

    } 

截图enter image description here

+0

尝试原始类型的“长”,而不是“长”,这是一个包装类。 –

回答

5

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

如果你真的不需要Long,使用long - 它会更容易,并能更efiicient

+0

它的工作......你能帮我理解为什么人们拒绝投票我的问题吗?这是一个很棒的平台,但人们只是投票,我很小心地写下来。我的另一个帐户我不能发布问题了,因为人们一直这样做。 AFF。我不知道平台的重点,如果人们不能问他们不知道的东西...... –

+0

我认为减去投票是因为问题与Android无关,而是与Java,以及compariosn和对象的等同性和原语是Java学习中的基本主题。您可能会通过在Google或任何书中搜索来获得更快的响应速度 –

1

试试这个:

long a1,a2; 
long b1,b2; 

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

}