为什么这段代码会给出一个空指针异常?我认为 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();
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();