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