空指针异常字符串null

时间:2013-01-31 15:09:09

标签: java nullpointerexception

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)

6 个答案:

答案 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中,所有对象(任何非intboolean等基本类型的变量都是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 
}