![](/img/trans.png)
[英]A better way to convert Integer (may be null) to int in Java?
[英]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.