【问题标题】:Why null is not equal to null? [duplicate]为什么null不等于null? [复制]
【发布时间】:2020-04-27 23:33:54
【问题描述】:

我不明白我的应用程序中发生了什么。我正在将带有更新的 PUT 请求从 Angular 项目发送到 java api。我有一个方法可以验证来自 put 请求的查询参数,该方法如下所示:

private JsonObject validateRequestBody(JsonElement requestBody) {
    if (!(requestBody instanceof JsonObject)) {
        throw new IllegalArgumentException("Request body cannot be case to JSON object");
    }
    JsonObject bodyObj = requestBody.getAsJsonObject();
    System.out.println(bodyObj.get("entityIri").equals(null));
    if (bodyObj.get("entityIri") == null) {
        System.out.println("null");
        throw new IllegalArgumentException("Request body must contain entity IRI");
    }
    return bodyObj;
}

如您所见,我只是想检查enityIri 参数是否等于null。为了测试它,我从 Angular 项目发送 null 作为 entityIri。我试图将它们与equal 方法和== 进行比较,但在这两种情况下,输出总是错误的。有人能解释一下为什么他们不相等吗?是因为我将它传递给JsonObject 吗? 我从调试中附上了screenshot(我删掉了不相关的部分)。

【问题讨论】:

  • bodyObj.get() 将返回JsonObject 的实例,它不是null,您可以调用getAsString() 或其他任何方式执行此类验证
  • 我尝试将bodyObj.get("entityIri")"null" 进行比较,但这也是错误的。另外在截图中,可以看到在调试过程中bodyObj.get("entityIri")的值为null,不是字符串,因为它没有引号

标签: java json equals


【解决方案1】:

尝试使用isJsonNull方法:

提供检查以验证此元素是否表示空值 与否。

if (bodyObj.get("entityIri").isJsonNull()) {
    ...
}

当然,你需要先检查bodyObj.get("entityIri")是否不是null。我没有添加它声明以使声明清晰。

【讨论】:

  • 如果entityIri 丢失,当然会抛出NullPointerException
  • @Andreas,我只是想弄清楚如何使用它。但是,当然,你是对的。我添加了额外的评论,指出检查 null 是个好主意。
猜你喜欢
  • 2010-12-22
  • 2022-11-21
  • 2018-10-08
  • 1970-01-01
  • 2011-09-05
  • 1970-01-01
  • 1970-01-01
  • 2016-12-23
  • 2023-03-19
相关资源
最近更新 更多