if( currentTimeslot.isEmpty()){
System.out.println("Do stuff");
}
为什么我得到NullPointerException
?如何检查字符串是否为NULL
并执行其中的操作?每当currentTimeslot
等于NULL
时,我就会收到错误消息。这是控制台消息:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at PM.ui.MainFrame.getJPanelTopMenu(MainFrame.java:382)
答案 0 :(得分:4)
尝试以下
if( currentTimeslot == null){
System.out.println("Do stuff");
}
答案 1 :(得分:1)
您可能是Java的新手,在Java中,对象可以为null,这意味着 在该Object上没有方法可以接近,因此每次尝试访问null Object的方法时都会抛出NullPointerException。
要解决此问题,您应该通过
检查对象是否为空 if ( currentTimeslot != null ){
....
}
由于所有 Java对象都从java.lang.Object扩展,因此此检查不仅适用于任何类型的字符串。
答案 2 :(得分:1)
要问自己一个重要的事情:null
和你在做什么在逻辑上是空的吗?
如果是这样,您可能想要使用它:
if (currentTimeslot == null || currentTimeslot.isEmpty()) {
// Do stuff
}
如果该语句的前半部分求值为true
,Java将不会打扰后半部分,从而保护您免受空指针异常的影响。
另一种方法是规范化您的数据;如果你想要null
和一个空字符串被视为同一个东西,那么在代码的早期就做这样的事情:
if (currentTimeslot == null) currentTimeslot = "";
现在,每次使用时都不需要进行防御性无效检查。
至于为什么你得到异常:在Java中,所有对象(任何非int
,boolean
等基本类型的变量都是null
直到你初始化*它。如果您尝试访问该对象的任何方法或字段,您将获得一个空指针异常,因为您要求代码访问尚未实际存在的内容。在Java中,您要么确保您的对象早期初始化或进行大量防御性空检查(使用if (variable != null) { ... }
或try { ... } catch (NullPointerException npe) { ... }
块)以防止您正在运行的问题成。
* - 当然,请使用null
之外的其他内容对其进行初始化。
答案 3 :(得分:1)
if(currentTimeslot==null){
System.out.println("whatever");
}
命令currentTimeslot.isEmpty()
与currentTimeslot.equals("")
相同,不被视为空,它只是空的。如果你想检查它是否为null或者它是空的,你必须将一个if-case放到另一个中,如下所示:
if(currentTimeslot==null){
System.out.println("null string");
}
else{
if(currentTimeslot.isEmpty()){
System.out.println("empty string");}
}
如果您要放置的命令很多,可以将它们复制两次,您可以将它们放入函数并调用该函数,或者使用在两种情况下都变为true的布尔变量,然后检查布尔变量是否为如果执行其余命令,则为true,如下所示:
boolean empty;
if(currentTimeslot==null){
System.out.println("null string");
empty=true;
}
else{
if(currentTimeslot.isEmpty()){
empty=true;
System.out.println("empty string");}
}
if(empty){
....
.... }
希望这会有所帮助:)
答案 4 :(得分:0)
如果您收到空指针异常,可能是因为currentTimeslot为null。 所以你应该首先检查它是否为null,然后调用它的一个方法:
if(currentTimeslot!=null && currentTimeslot.isEmpty())...
答案 5 :(得分:0)
我建议你放弃大多数字符串空和空测试。很久以前Apache Commons Lang StringUtils解决了大多数字符串操作(空,空,非空,全是空白等)。
下载apache commons lang并使用它。
您的代码将变成这样:
if (StringUtils.isEmpty(currentTimeslot))
{
... react to an empty currentTimeslot .
}
else // currentTimeslot is not emty (that includes not null).
{
.. react to a not empt currentTimeslot
}