我在Java工作。
我通常会设置一些对象:
public class Foo {
private SomeObject someName;
// do stuff
public void someMethod() {
if (this.someName != null) {
// do some stuff
}
}
}
问题是:此示例中的someName
是否等同于null
,因为我可以reliably for all objects
假设空检查未初始化的对象是否准确?
答案 0 :(得分:101)
正确,未显式初始化的引用类型的静态和实例成员都由Java设置为null
。同样的规则适用于数组成员。
来自Java Language Specification,第4.12.5节:
变量的初始值
程序中的每个变量在使用其值之前必须具有值:
使用a初始化每个类变量,实例变量或数组组件 创建时的默认值
[...]对于所有参考类型,默认值为
null
。
请注意,上述规则排除了局部变量:必须显式初始化它们,否则程序将无法编译。
答案 1 :(得分:13)
如果已声明Object
引用但未实例化,则其值为null
。
答案 2 :(得分:0)
namespace Design
{
class Program
{
static void Main(string[] args)
{
Logger obj1; // By Default, the value of obj1 is null
Logger obj2 = new Logger(); // By Default the value of obj2 is
// Design.Logger which is not null
Console.WriteLine(obj2);
Console.Read();
}
}
class Logger
{
public Logger()
{
Console.writeline("Called");
}
}
}