gpt4 book ai didi

java - 实例 boolean 变量的 NullPointerException

转载 作者:行者123 更新时间:2023-11-29 09:48:09 27 4
gpt4 key购买 nike

我使用以下代码检查初始化的 boolean 变量是否设置为 True 或 False。当我尝试运行此代码时,出现 NullPointerException 错误。

谁能解释一下会出现什么问题?

public class Scratch {
Boolean[] bool = new Boolean[5];
String s = new String();


public static void main(String[] args) {
new Scratch().mymethod();

}

public void mymethod() {
if (s == "Tom"){
System.out.println("Tom");
}
System.out.println("S value = "+ s);

if (bool[1] == true) {
System.out.println("True");
} else {
System.out.println("false");
}
}

}

最佳答案

您正在创建一个 boolean 数组,不是 boolean 数组,并且您试图在用 boolean 对象填充它之前使用它,因此这将抛出 NPE 不足为奇。

解决方案:

  • 创建一个 boolean 数组,如果初始化,它将填充默认的 false 值。
  • 如果必须(例如在 JTable 模型中使用),请创建一个 boolean 值数组,但请确保在使用该数组之前每个项目都已初始化为有效的 boolean 值实例。

例如,从

Boolean[] bool = new Boolean[5];

boolean[] bool = new boolean[5];

Boolean[] bool = {Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, 
Boolean.FALSE, Boolean.FALSE};

编辑

请理解 boolean 是一个原始类型,如果一个 boolean 变量没有显式初始化,没有被赋值,它默认为 false。

另一方面, boolean 值是一种引用类型,它“封装”了一个 boolean 值,提供了一个引用变量,可以在需要引用的地方使用 boolean 值原语,例如在集合中。与所有引用类型一样, boolean 变量如果未显式分配给实例,则默认为空值。


编辑2

请注意,如果您使用字符串,您将遇到同样的问题。例如

String unAssigned;

if (unAssigned.equals("foo") {
System.out.println("the method above throws a NPE");
}

String[] strings = new String[5];
// all the strings items above are null

编辑3

您想知道为什么这不做同样的事情:String s = new String();

  • 您正在创建一个新的 String 对象并将其分配给 s 变量,因此 s 不为空
  • 对于 boolean 数组,是的,您正在为变量分配一个新数组,因此数组不为空,但数组包含的项目为空。
  • 您没有在任何地方使用 String 数组,因此它们根本不是一回事。来吧,让我们比较苹果与苹果,而不是苹果与橙子。
  • 顺便说一句,您几乎不应该使用 new String(),因为它会绕过 String 池,并可能导致代码效率低下,从而不必要地创建额外的 String 对象。

关于java - 实例 boolean 变量的 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21815858/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com