簡體   English   中英

在 Java 中將 int 與潛在的 null Integer 進行比較的最簡潔方法是什么?

[英]What is the cleanest way to compare an int with a potentially null Integer in Java?

Map<String,Integer> m;
m = new TreeMap<String,Integer>();

添加以下強制轉換只是為了在 m.get() 為空時避免空指針異常是否是一種好習慣。

System.out.println( ((Integer) 8).equals( m.get("null") ) ); // returns false

或者,使用先前的空檢查,它開始看起來有點難看。

System.out.println( m.contains("null") != null && m.get("null").equals( 8 ) );

有沒有更好的方法來寫這個? 謝謝。

==運算符不比較值,而是比較引用。

您應該使用.equals()方法,而不是應用於Integer變量(您確定它不是null並且不會拋出 NPE):

Integer eight = 8; //autoboxed
System.out.println(eight.equals(m.get("null")));

即使m.get("null")返回null這也會打印false

我盡量避免強制轉換,所以我寧願使用以下內容,在我看來它看起來也更好:

Integer.valueOf(8).equals(m.get("null"))

不,因為它行不通。 你不能用==比較兩個Integer ,因為它比較的是引用而不是整數值。 這個問題中查看更多信息

您將需要一個輔助方法,例如:

boolean safeIntegerCompare(Integer a, int b)
{
    if (a != null) 
      return a.intValue() == b;
    return false;
}

如果只有一個參數可能為null (就像將未知值與常量進行比較時的情況),請像​​這樣使用equals()

Integer foo = Integer.valueOf(8); // you could write Integer foo = 8; here too but I prefer to avoid autoboxing
if (foo.equals(m.get("x"))) { //will never throw an NPE because foo is never null
   ...
}

請注意,您的示例一般不會起作用,因為將非原始值與==進行比較僅在它們引用同一對象實例時才返回 true。 (在這種情況下,出於非常具體的原因,這甚至可能是正確的,但大多數時候並非如此。)

擴展接受的答案:我發現自己必須檢查 2 個整數變量的相等性,這些變量可能為空,也可能不為空。

所以我的解決方案是:

布爾等於 = Optional.ofNullable(objectA.getNullableInteger()).equals(Optional.ofNullable(objectB.getNullableInteger());

暫無
暫無

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

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