2017-04-25 79 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)) { 

}