[英]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
方法,因此abc為null它將nullPointerException
。
如果我錯了,請糾正我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.