[英]JSONObject value null check failed with empty() and ==null why
我正在關注 json
{"signature": null, "state": "eyJjc3OiIifQ", "tokenId": null, "error": "EXCEPTION_REQUEST_CANCELLED"}
從jsonObject
的JSONObject jsonObject = new JSONObject(authMeta);
我試過檢查
if(jsonObject.get("signature") == null) {} else {}
條件 IF 失敗,代碼轉到 else 塊。 嘗試了另一種方法
if(jsonObject.get("signature").toString().isEmpty())
上面也失敗了。
if(jsonObject.get("signature").equals(null))
工作了。
以下代碼有效。
jsonObject.isNull("signature")
我檢查了 isNull 方法,我發現了以下內容。
public boolean isNull(String key) {
return JSONObject.NULL.equals(this.opt(key));
}
無法理解為什么 null 不同?
因為org.json.JSONObject.get(java.lang.String key)
將返回java.lang.Object
。
所以...
jsonObject.get("signature") == null
這是行不通的,因為 Java 中的==
用於比較原語和對象。 並且==
根據內存引用比較兩個對象。 所以==
運算符只有在它比較的兩個對象引用代表完全相同的對象時才會返回 true。
jsonObject.get("signature").equals(null)
這是有效的,因為我們使用equals()
方法來比較 Java 中的對象。 為了確定兩個對象是否相同, equals()
比較對象的屬性值。
讓我們看看下面的例子:
System.out.println(obj.get("signature").getClass()); //class org.json.JSONObject$Null
System.out.println(obj.get("state").getClass()); //class java.lang.String
System.out.println(JSONObject.NULL.getClass()); //class org.json.JSONObject$Null
您可以看到第一個語句返回一個Object
,第二個語句返回一個String
。 這就是為什么您使用equals()
進行空檢查的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.