2016-03-15 51 views
-3

這條線的來源在下面提供,我明白v.compareTo(w)做了什麼,但我很好奇「< 0」具有什麼影響,如果compareTo返回1,它是否不允許它返回比0?如果compareTo返回0,它會返回0,因爲它等於0會不會返回?return v.compareTo(w)<0; 「<0」服務有什麼影響?

private static boolean less(Comparable v, Comparable w) 
{ 
    return v.compareTo(w) < 0; 
} 
+4

*「我明白wha t v.compareTo(w)確實「* ...你確定嗎?你可能想重新檢查'compareTo'返回,然後你明白'<0'的作用。 – Tom

回答

1

compareTo()方法返回一個整數值。可以是0,1或-1。使用到的值(ab)爲例:

a.compareTo(b); 
  • a > b,你1
  • a == b,你0
  • a < b,你-1

「< 0」服務有什麼影響?

從你給出的方法實現:

return v.compareTo(w) < 0; 
     |------------| 
      V 
    return 0 or 1 or -1 

// return 0 if v == w 
// return 1 if v > w 
// return -1 if v < w 

因爲對於v.compareTo(w)的唯一場景是較小比0時v < w,相當於話說:

回報TRUE如果( v < w),否則返回

+0

*「0,1或-1」*這不完全正確。返回的值不必是那個,它可以是_any_正數或負數。 – Tom

+0

@Tom這是真的。但我試圖給出一個簡單的場景,在比較整數的情況下,'a> b,你得到1'。也許我應該說這是整數的情況。 – user3437460

2

該功能被命名爲less。在v小於w的情況下,應只返回true。否則它將返回false

0

compareTo()函數返回一個整數值。但是,通過添加條件運算符<,語句v.compareTo(w) < 0返回布爾值。它轉換爲「如果compareTo返回的值小於0」又名「如果v小於w」。如果v小於w,那麼該語句將評估爲true,並且您擁有的方法將返回true。否則,該語句將評估爲false,並且該方法將返回false。我建議打印出你的方法返回的值,因爲這樣你的方法就會返回一個布爾值。

0

您需要將<轉換爲booleanint結果。其他關係運算符也會將兩個int s轉換爲boolean,但<對於名爲「less」的方法是合適的。


你的代碼是不是類型安全的,因爲沒有約束vw是相互比較,因爲它們是原始類型。

舉例來說,你可以調用此方法:

less(0, "") 

這將產生ClassCastException

相反,你應該寫爲:

private static <C extends Comparable<C>> boolean less(C v, C w) { 
    return v.compareTo(w) < 0; 
} 
相關問題