我需要使用类似于 php 的 isset 函数的东西。我知道 php 和 java 是非常不同的,但 php 是我以前对类似于编程的知识的唯一基础。是否有某种方法可以返回一个 boolean 值来判断实例变量是否已被初始化。比如……
if(box.isset()) {
box.removeFromCanvas();
}
到目前为止,当我的程序试图隐藏或删除尚未构造的对象时,我遇到了一个运行时错误。
最佳答案
假设您对变量是否被显式赋值感兴趣,答案是“不是真的”。尚未显式分配根本的字段(实例变量或类变量)与已分配其默认值的字段(实例变量或类变量)之间绝对没有区别 - 0、false、null 等。
现在如果你知道一旦赋值,这个值就永远不会重新赋值为null,你可以使用:
if (box != null) {
box.removeFromCanvas();
}
(这也避免了可能的 NullPointerException
),但您需要注意“值为 null 的字段”与“未明确显示的字段”不同赋值”。 Null 是一个完全有效的变量值(当然对于非原始变量)。实际上,您甚至可能想将上面的代码更改为:
if (box != null) {
box.removeFromCanvas();
// Forget about the box - we don't want to try to remove it again
box = null;
}
局部变量也可以看到差异,在“明确分配”之前无法读取它们 - 但可以明确分配的值之一是 null(对于引用类型变量):
// Won't compile
String x;
System.out.println(x);
// Will compile, prints null
String y = null;
System.out.println(y);
关于Java 检查变量是否已初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7509697/