# Java 8 开始新增的 Optional 类 - 检查 Optional 的值

**URL:** <https://www.isharkfly.com/t/java-8-optional-optional/13966>\
**Category:** 程序语言\
**Created:** [May 13, 2022, 7:07pm UTC](https://www.isharkfly.com/t/java-8-optional-optional/13966 "2022-05-13T19:07:18Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![honeymoose](https://www.isharkfly.com/user_avatar/www.isharkfly.com/honeymoose/32/20796_2.png) [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Post date:** [May 13, 2022, 7:07pm UTC](https://www.isharkfly.com/t/java-8-optional-optional/13966/1 "2022-05-13T19:07:18Z")

</div>

## 检查值是否存在的 _isPresent()_ 和 _isEmpty()_ 方法

当我们使用 _Optional_ 对象的时候，我们可以使用 _isPresent()_ 方法来检查返回的 Optional 对象中是否有值。

Optional 对象可以是你自己创建的，或者是从其他方法中返回的。

```auto
    @Test
    public void givenOptional_whenIsPresentWorks_thenCorrect() {
        Optional<String> opt = Optional.of("HoneyMoose");
        assertTrue(opt.isPresent());

        opt = Optional.ofNullable(null);
        assertFalse(opt.isPresent());
    }

```

如果 Optional 对象中的值不为 null 的话，这个方法将会返回 True。

同样的，如果使用 Java 11 的话，你可以使用与 isPresent 相反的方法 _isEmpty_。

如果你的对象中的值为 null 的话，_isEmpty_ 将会返回 True。

```auto
    @Test
    public void givenAnEmptyOptional_thenIsEmptyBehavesAsExpected_JDK11() {
        Optional<String> opt = Optional.of("Baeldung");
        assertFalse(opt.isEmpty());

        opt = Optional.ofNullable(null);
        assertTrue(opt.isEmpty());
    }

```

如果你查看 API 的话，你会看到 JDK 的源代码只是用了简单的判断是否等于 null。

 ![opt-01](https://com-ossez-www-discourse.s3.dualstack.us-east-2.amazonaws.com/discourse-uploads/original/2X/a/ab05b8a150cb10f6635e372cd3838b0fa9147311.png)

这 2 个方法的使用正好是相反的。
