gpt4 book ai didi

java - JSONObject 值 null 检查失败,并显示empty() 和 ==null 为什么

转载 作者:行者123 更新时间:2023-12-02 09:12:49 24 4
gpt4 key购买 nike

我有以下 json

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

来自 jsonObjectJSONObject jsonObject = new JSONObject(authMeta);

我尝试检查

if(jsonObject.get("signature") == null) {} else {}

条件 IF 失败,代码转到 else block 。尝试了另一种方法

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() 进行 null 检查的原因。

关于java - JSONObject 值 null 检查失败,并显示empty() 和 ==null 为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59261080/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com