为什么这段代码会给出一个空指针异常?我认为 Character class 可以处理 null 分配?

Why does this code give a null pointer Exception? I thought Character class could handle null being assigned?

public class Playground {
  public static void main(String[] args) {
    String s = "blah";
    Character lclfs = s.contains("/") ? '/' : s.contains("\") ? '\' : null;
  }
}

我错过了什么(使用 Java 1.8)?

那是因为您的代码将尝试拆箱 null。使用 IntelliJ 这将直接显示为警告:“Unboxing of null may produce NullPointerException”。

另一种方法是这样做:

String s = "blah";
Character lclfs = s.contains("/") ? Character.valueOf('/') : 
    s.contains("\") ? Character.valueOf('\') : null;

正如@Antoniosss 指出的那样,这也有帮助:

String s = "blah";
Character lclfs = s.contains("/") ? Character.valueOf('/') : 
    s.contains("\") ? (Character)'\' : null;

谈到 IntelliJ 中的警告,我上面的代码现在说:“不必要的装箱 'Character.valueOf('\')'”。所以你可能应该尝试重构你的代码。您可以引入 java.util.Optional:

而不是显式使用 null
Optional<Character> lclfs = s.contains("/") ? Optional.of('/') :
        s.contains("\") ? Optional.of('\') : Optional.empty();