【发布时间】:2014-03-28 17:08:34
【问题描述】:
我了解尝试将 null 的 Object 的值与某物进行比较会导致 NullPointerException,例如,
String bob;
if(bob.equals("blahblahblah")){do_something();}
并且像这样使用嵌套检查是个好主意:
if(!bob.equals(null)){
if bob.equals("blah blah blah"){
do_something();
}
}
但是如果我还没有给 bob 任何值,当我运行上面说 bob 尚未初始化时,我会收到一个错误 - 因为我将 bob 与 null 进行比较,所以我应该能够在没有问题,不应该吗?
谢谢。
【问题讨论】:
-
当然鲍勃是
null: stackoverflow.com/questions/218384/… -
您可以将 bob 与 null 进行比较是对的,但在这种情况下您将使用 == 运算符。对于字符串比较(在非空值上,意味着在空检查之后),您使用 .equals 方法。它不是引发异常的比较,而是对 null 对象 (bob) 上的 .equals 方法的调用。
-
有什么区别?
-
@JonK Java 不是 C。在 Java 中,变量要么由用户/程序员初始化,要么具有默认值(
false用于布尔值,0用于数值,null用于引用) .如果变量不会被初始化并尝试使用,代码将无法编译。 BTW 只有类字段由编译器设置为具有默认值,局部变量(方法中声明的变量需要由用户/程序员初始化)。 -
@JonK 您评论中最有问题的句子是“JVM 分配给该变量的内存保留了它在 JVM 为变量抓取它之前所持有的任何内容”。例如,您说的是
int i; /*some time passes*/ i=42;在这种情况下i=42之前的i的内存实际上无法重置,因此它可以是任何一组位,但我们无法检查它,因为Java 明确要求在可以使用之前对其进行初始化(如jls-4.12.5 所述)。
标签: java nullpointerexception null initialization