簡體   English   中英

JSONObject 值 null 檢查失敗,empty() 和 ==null 為什么

[英]JSONObject value null check failed with empty() and ==null why

我正在關注 json

{"signature": null, "state": "eyJjc3OiIifQ", "tokenId": null, "error": "EXCEPTION_REQUEST_CANCELLED"}

jsonObjectJSONObject 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.

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