java - 在 Java 中表示 "Both not null and not equal"的实用方法

标签 java nullpointerexception

String str = "abc";

像下面这样比较这个字符串变量。

if(str.equals("abc")) {}

如果 strnull,它会导致明显抛出 java.lang.NullPointerException

为避免这种情况,可能会强制执行额外的空值检查。比如,

if(str != null && str.equals("abc")) {}

我觉得很丑。更好的可以重写如下。

if("abc".equals(str)) {}

这永远不会抛出 java.lang.NullPointerException,即使 strnull。此外,object equals null 永远不会为真。


然而,当条件表达式像这样反转时,不能使用最后一种情况,

if(!"abc".equals(str)) {
    System.out.println(str.length());
}

如果 strnull,这将导致 if block 内的 java.lang.NullPointerException

如果不像下面这样重写条件语句,是否可以以某种方式避免这种情况?

if(str != null && !"abc".equals(str)) {}

这简直丑陋且不可读。


虽然该示例使用了一个String对象,但它可能是一个更复杂的对象。

最佳答案

另一种方法是使用 Java 8 可选包装器

Optional<Customer> optional = findCustomer();

if (optional.isPresent()) {
Customer customer = maybeCustomer.get();
    ... use customer ...
}
else {
    ... deal with absence case ...
}

来源:https://dzone.com/articles/java-8-optional-how-use-it

关于java - 在 Java 中表示 "Both not null and not equal"的实用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31744411/

相关文章:

java - 为什么 HashMap 中的不可变对象(immutable对象)如此有效?

java - Jelastic 上多应用一个数据库场景的最佳配置

java - WatchService 无法在 Java 中注册

java - 什么是 NullPointerException,我该如何解决?

tabs - JDK 1.8 JavaFX 选项卡 Pane 抛出 NullPointerException

java - 自签名 (jdk 7u45) Applet 在 Firefox 和 chrome 中通过 SSL 运行时出现 NullPointerException

jdbc - 由于我们的 Sybase JDBC 驱动程序,Charset.availableCharsets 抛出 NullPointerException

java - Jetty 升级到 9.4.19.v20190610 后,传入的客户端请求中没有 X509 证书

Java:子进程完成后使用相同的子进程变量是否安全?

java - 带有 Date 对象的奇怪 NullPointerException