簡體   English   中英

為什么拋出空指針異常?

[英]Why is this throwing null pointer exception?

我已經在這里提出了一個矛盾問題, 為什么這不引發NullPointerException?

但這是我想了解的另一種類型和行為,請在下面查找我的示例

package com;

public class test {

    public static void main(String[] args) {
        Abc abc = null;

        //Scenario 1
        System.out.println("ERROR HERE " + abc!=null?abc.getS1():""); //This is throwing null pointer exception 

        //Scenario 2
        String s1 = abc!=null?abc.getS1():"";
        System.out.println("This is fine " + s1);
    }
}

class Abc {
    String s1;

    public String getS1() {
        return s1;
    }

    public void setS1(String s1) {
        this.s1 = s1;
    }


}

因此,這里的方案2可以正常工作,但是當我與方案1中的其他字符串串聯一起嘗試時,為什么它不起作用?

"ERROR HERE " + abc!=null?abc.getS1():"" 

相當於

("ERROR HERE " + abc!=null)?abc.getS1():""

(它永遠不會評估為false,因此您會得到NPE)

你的意思是:

"ERROR HERE " + (abc!=null?abc.getS1():"")

您將需要將其分開(用方括號括起來),以便將其作為一個完整的單獨語句閱讀

System.out.println("ERROR HERE " + (abc != null ? abc.getS1() : ""));

為Eyal和Ross +1票。

在看到Tenner的回答和評論后,我得出結論,

它拋出nullPointerException因為!=運算符優先級低於+

因此,編譯器正在調用Abc類的toString方法,因此abcnull它將nullPointerException

如果我錯了,請糾正我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM