Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java if语句能否触发null异常?_Java_Nullpointerexception - Fatal编程技术网

Java if语句能否触发null异常?

Java if语句能否触发null异常?,java,nullpointerexception,Java,Nullpointerexception,在我的代码中,有一行代码正在生成一个空指针异常 if (x[i].getPos() == "QB") { playerTextBox.setText(playerTextBox.getText() + "\n" + f.printPlayer(x, i)); } Im几乎为正,空值不是数组x。我进行了调试,有一些对象填充了数组。我现在很好奇,我想为了将来的目的,如果x为null,你会得到一个null指针异常吗 (x[i].getPos()=“QB”)?好吧,x[i]是null,

在我的代码中,有一行代码正在生成一个空指针异常

 if (x[i].getPos() == "QB") {
     playerTextBox.setText(playerTextBox.getText() + "\n" + f.printPlayer(x, i));
 } 
Im几乎为正,空值不是数组x。我进行了调试,有一些对象填充了数组。我现在很好奇,我想为了将来的目的,如果x为null,你会得到一个null指针异常吗
(x[i].getPos()=“QB”)

好吧,
x[i]
null
,否则不会有任何异常。另外,您应该使用
等于
,而不是
=
来比较
字符串

您的
if
应如下所示:

if (x[i] != null && "QB".equals(x[i].getPos()) {
    //...
}
    if (playerTextBox == null) {
        throw new IllegalArgumentException("playerTextBox was null");
    }
    if (f == null) {
        throw new IllegalArgumentException("f was null");
    }
    if (x == null) {
        throw new IllegalArgumentException("x was null");
    }

    if (  x[i] != null && "QB".equals( x[i].getPos() )  ) {
        playerTextBox.setText(playerTextBox.getText() + "\n" + f.printPlayer(x, i));
    }
顺便说一下,我建议您使用
列表
而不是数组。如果考虑到,则默认情况下,数组将填充
null
值。

if (x[i].getPos() == "QB")
如果
x[i]
为空,将生成空指针异常。不能在
null
上调用方法。此外,您正在测试
String
引用相等(而不是值相等)

答案是肯定的。 如果x为null,那么如果您试图获取它,x的位置将导致异常。 因此,
x[i].getPos()
可能导致空指针异常。

是的,它们可以

x[i].getPos()
如果x[i]为空,将抛出nullpointerexception

任何时候,如果你不确信它不能为空,你应该检查它是否为空。短路评估是实现这一目标的常用方法

if(x[i]!=null&&x[i].getPos()=“QB”)playerTextBox.setText(playerTextBox.getText()+“\n”+f.printPlayer(x,i))

如果
x[i]
为空,则会悄悄地传递此代码。但是,您说您确信不是
x[i]
为空。因为您已经将if的主体与它的条件放在同一行上,所以异常的行号不会给出任何关于哪个点导致了nullpointerexception的提示

如果
playerTextBox
f
为空,则它们也将生成NullPointerException。您必须决定是否希望这些代码在为null时安静地失败,抛出一个异常在其他地方处理,或者以某种方式确保它们不能保留为null

如果我假设当它们为null时,您希望它抛出
invalidargumentexception
,我会这样重写代码:

if (x[i] != null && "QB".equals(x[i].getPos()) {
    //...
}
    if (playerTextBox == null) {
        throw new IllegalArgumentException("playerTextBox was null");
    }
    if (f == null) {
        throw new IllegalArgumentException("f was null");
    }
    if (x == null) {
        throw new IllegalArgumentException("x was null");
    }

    if (  x[i] != null && "QB".equals( x[i].getPos() )  ) {
        playerTextBox.setText(playerTextBox.getText() + "\n" + f.printPlayer(x, i));
    }

如果您确信其中任何一个都不能为null,那么可以删除null测试。IllegalArgumentException适用于传入变量的上下文,因此需要验证其状态。如果您不打算在这个方法中解决这个问题,但又不想悄悄地什么都不做,那么正确的做法是抛出一个异常,调用堆栈中您上面的某个部分必须决定如何从中恢复。如果您有一种从IllegalArgumentException恢复的方法,那么能够将所有这些异常发送到一个要解决的位置是非常好的。

为什么x[i]为null,当我调试时,它告诉我数组中填充了objects@JGerulskis做一些简单的事情:添加
if(x[i]==null){System.out.println(“x[“+i+”]为null!”);}
。这比调试器更有用。@jgerulski如果您要对文本
字符串(如“QB”)进行比较,最好用另一种方式进行比较:
“QB”.equals(x[i].getPos())
,即使
x[i].getPos()),此实现也不会有
NullPointerException
返回
null