【问题标题】:null pointer exception in below code下面代码中的空指针异常
【发布时间】:2012-11-16 04:37:30
【问题描述】:

在下面的代码中,最后一个 sop 没有打印出来

String A=null;

if (A.contains("xyz")) {
    System.out.println("loop1");
}
System.out.println(A);

【问题讨论】:

    标签: java


    【解决方案1】:

    由于上面的 A 为空,代码将抛出 NullPointerException(NPE),这是一个 RuntimeException。

    当对 null 执行任何调用时,将引发异常,在您的情况下是 contains 方法调用。

    A.contains("xyz")
    

    【讨论】:

    • 在@Nambari 的关于你最后陈述的回答中查看我的 cmets。
    • @All :实际上上面的 Snippet 处于 for 循环中,并且有一次它具有空值,其余时间它具有值,因此如何解决此问题,以便避免空一个而其他人得到接受了吗?
    • @adityasingh 您需要在调用 A 上的方法之前执行 null 检查。这应该看起来像 A != null && A.contains("xyz")
    • @adityasingh 很高兴它对你有用。你能接受答案吗?
    【解决方案2】:

    A 是null,您正在呼叫if (A.contains("xyz"))

    对null 的任何调用引用结果NullPointerException,您没有将上述语句包装在try/catch 中,因此异常会传播到更高级别而不执行下面的代码。

    将其更改为:

    String A="";
    

    【讨论】:

    • null 上没有任何 operation 抛出 NPE。 "xyd".equals(null) 例如运行良好。你应该说,any invocation 在 null 上抛出 NPE。
    • @RohitJain:好的,改变了措辞。
    • @RohitJain:我们是否在上述语法中对 xyd(或)null 调用 equals 操作?不是英语专家。我通常认为,对象离开然后 .(dot) 和对该对象的操作不是吗?
    • @Nambari.. 是的。你是对的。这就是来龙去脉。我们在“xyd”上调用equals 方法。
    • @RohitJain:好的,那你的评论可能不成立。
    【解决方案3】:
    if (A.contains("xyz")) { 
    

    由于 A 为空,您正试图在 A 上调用 Contains。因此是 NPE

    【讨论】:

    • 其实很可能发生在if (A.contains("xyz"))
    【解决方案4】:

    在String A=null; 中,您将字符串引用A 设置为null。此时你有一个引用,但它还没有指向一个对象。然后,您尝试通过调用.contains 方法来使用引用,就好像它指向一个对象一样,这将导致 NullPointerException,因为在引用指向的位置没有要执行的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-09
      • 2018-09-23
      • 2015-12-23
      • 2015-10-30
      • 2011-02-04
      • 1970-01-01
      • 2011-10-24
      相关资源
      最近更新 更多