簡體   English   中英

java 三元運算符可以替換為 Math.max 調用

[英]java ternary operator can be replaced with Math.max call

我有以下代碼delay = (delay>200)? delay: 200; delay = (delay>200)? delay: 200;
Java發出警告消息Can be replaced with 'Math.max' call
在這里我看到Math.max(a, b)實際上與(a > b)? a: b (a > b)? a: b所以三元運算符不比Math.max
那么,如果通過Math.max方法調用替換三元運算符沒有優勢,為什么Java發出此警告消息?

我懷疑這是一個真正的編譯器警告,可能是一些 IDE 檢查/警告。

盡管如此,你是對的,沒有硬性的技術理由來選擇一個而不是另一個。

但是:從人類讀者的角度來看,使用Math.max()一個主要優勢:更容易閱讀和理解。 就這么簡單。

此外:除非必須,否則不要重復代碼。

永遠記住:您為人類讀者編寫代碼。 編譯器接受任何語法正確的東西。 但是對於您的人類讀者來說,條件和分配與非常有說服力的“取兩個數字的最大值”之間存在差異。

Math.max(a, b)比 tenary 語句更具可讀性,因為:

  • 200不需要重復。
  • 沒必要寫明白>

一般來說,三元更強大,因為它可以讓你做這樣的事情:

    delay = (delay>200) ? 200 : delay;
    delay = (delay<200) ? delay : 200;
    delay = (delay>200) ? delay: 300;

您的代碼的讀者需要了解您實際在做什么。 解析它並理解它是一個簡單的max()需要時間。

max更清楚地顯示了您的意圖。

除了現有答案之外,如果下限(在您的情況下為 200)不是常數而是派生值,則可能會帶來性能優勢:

delay = (delay > readLimitFromFile()) ? delay : readLimitFromFile();

當一個操作就足夠時,這最終可能會執行 2 次昂貴的磁盤讀取操作。 使用 Math.max:

delay = Math.max(delay, readLimitFromFile());

將只使用一次磁盤讀取操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM