Java JSONObject值null检查失败,为空()且==null为什么

Java JSONObject值null检查失败,为空()且==null为什么,java,json,Java,Json,我有以下几个问题 {"signature": null, "state": "eyJjc3OiIifQ", "tokenId": null, "error": "EXCEPTION_REQUEST_CANCELLED"} 来自jsonObject的jsonObject,jsonObject=newjsonobject(authMeta) 我试着检查了一下 if(jsonObject.get(“签名”)==null){}else{} 条件,如果失败,代码转到else块。尝试了另一种方法 if(

我有以下几个问题

{"signature": null, "state": "eyJjc3OiIifQ", "tokenId": null, "error": "EXCEPTION_REQUEST_CANCELLED"}
来自
jsonObject的
jsonObject
,jsonObject=newjsonobject(authMeta)

我试着检查了一下

if(jsonObject.get(“签名”)==null){}else{}
条件,如果失败,代码转到else块。尝试了另一种方法

if(jsonObject.get(“签名”).toString().isEmpty())
上述措施也失败了

if(jsonObject.get(“签名”).equals(null))
成功了

下面的代码有效

jsonObject.isNull(“签名”)
我检查了isNull方法内部,发现如下内容

公共布尔值为空(字符串键){
返回JSONObject.NULL.equals(this.opt(key));
}

无法理解为什么null不同

因为
org.json.JSONObject.get(java.lang.String键)
将返回
java.lang.Object

所以

这不起作用,因为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
您可以看到,第一条语句返回一个
对象
,第二条语句返回一个
字符串
。这就是为什么对空检查使用
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