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

时间:2019-12-10 05:58:34

标签: java json

我正在关注json

private void share(String text, Uri uri, int type) {
    Intent share = new Intent(Intent.ACTION_SEND).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    share.setType("image/*");
    switch (type) {
        case 2:
            share.setPackage("com.whatsapp");
            break;
        case 3:
            share.setPackage("com.facebook.katana");
            break;
        case 4:
            share.setPackage("com.twitter.android");
            break;
        case 1:
        default:
            break;
    }
    share.putExtra(Intent.EXTRA_STREAM, uri);
    share.putExtra(Intent.EXTRA_TEXT, text);
    startActivity(Intent.createChooser(share, "Select"));
}

来自{"signature": null, "state": "eyJjc3OiIifQ", "tokenId": null, "error": "EXCEPTION_REQUEST_CANCELLED"} 的{​​{1}}

我尝试检查

jsonObject

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

JSONObject jsonObject = new JSONObject(authMeta);

以上也失败了。

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

工作。

以下代码有效。

if(jsonObject.get("signature").toString().isEmpty())

我检查了isNull方法内部,发现以下内容。

if(jsonObject.get("signature").equals(null))

无法理解为什么null不同?

1 个答案:

答案 0 :(得分:1)

因为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检查的原因。