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
。