簡體   English   中英

將多個 int 值與 0 進行比較的有效方法

[英]efficient way to compare multiple int values to 0

我正在嘗試將三個長度與 0 進行比較,並且想知道是否有比重復“.= 0”更有效/更清潔的方法。

public static boolean isTriangle(int lengthA, int lengthB, int lengthC) {
    if (lengthA != 0 && lengthB != 0 && lengthC != 0) { //is there a shorter/cleaner way to write this?
        //do a thing
    }
    return false;
}

您可以使用IntStreamallMatch

if(IntStream.of(lengthA,lengthB,lengthC).allMatch(i->i!=0)) {
     // do a thing
  }

或者也使用noneMatch

IntStream.of(lengthA,lengthB,lengthC).noneMatch(i->i==0)

另一種方法是使用 util 方法

public static boolean isNotZero(int val) {
       return val!=0;
     }

現在簡化if條件

if (isNotZero(lengthA) && isNotZero(lengthB) && isNotZero(lengthC)) { 

最佳答案(恕我直言): “甚至不要試圖猜測優化編譯器。” 只需以最准確地指定(對你的同胞,僅此而已......)你希望計算機做什么的方式指定源代碼。 不要假定實際提供給硬件的機器指令的實際序列實際上與此相對應。 “這很神奇。真的。”

你在問三件事; 你要的代碼是

  1. 更短
  2. 更高效
  3. 清潔器

我有一個替代方案給你:

if ((lengthA & lengthB & lengthC) != 0)

這是正確的 - 它與您的舊代碼相同(它使用按位與)

  1. 更短
  2. 它可能更有效,但只有一個好的微基准可以確認。 即使是這樣,那也不應該指導您。 由於第 3 點,您應該僅在使用性能分析器工具將其顯示為您的應用程序的瓶頸時才考慮它,這是非常非常不可能的。
  3. 但是它並不干凈 我的意思是它會讓你的代碼更難閱讀和理解,任何維護你的代碼的人現在都必須考慮位操作。

對於任何提議的替代方案,go 很可能也是如此。

您在原始代碼中所做的已經足夠好了; 這是人們所理解的,並且很可能是您為此目的編寫的最簡潔的代碼。

對於 Java 語言,您的代碼很好。 在 Java 中沒有更好的方法可以做到這一點。

暫無
暫無

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

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