Java 未初始化对象与初始化为空的对象
我在Java工作 我通常将一些对象设置为:Java 未初始化对象与初始化为空的对象,java,null,initialization,Java,Null,Initialization,我在Java工作 我通常将一些对象设置为: public class Foo { private SomeObject someName; // do stuff public void someMethod() { if (this.someName != null) { // do some stuff } } } 问题是:本例中的someName是否等同于null,就像我可以可靠地检查所有对象一样
public class Foo {
private SomeObject someName;
// do stuff
public void someMethod() {
if (this.someName != null) {
// do some stuff
}
}
}
问题是:本例中的
someName
是否等同于null
,就像我可以可靠地检查所有对象一样
假设null检查未初始化的对象是准确的?正确的,Java将未显式初始化的引用类型的静态成员和实例成员都设置为null
。同样的规则也适用于数组成员
根据第4.12.5节:
变量的初始值
程序中的每个变量在使用其值之前必须有一个值:
每个类变量、实例变量或数组组件都使用
创建时的默认值
[…]对于所有引用类型,默认值为null
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");
}
}
}
请注意,上述规则不包括局部变量:它们必须显式初始化,否则程序将无法编译。如果已声明但未实例化
对象
引用,则其值为null
仅作为类的实例字段。@SotiriosDelimanolis您能详细说明一下吗?我正在努力学习:)@SnakeDoc如果你在方法体中声明一个对象,如果你在没有初始化它的情况下尝试使用它,你会得到一个编译错误。这里值得一提的是,你从来没有声明过一个对象。您声明了一个变量。它们不是同一件事。@SotiriosDelimanolis很抱歉提出了一个非常古老的讨论,但是您是否碰巧有一个参考,说明为什么他们认为它应该导致编译错误,而不是像实例字段一样将其初始化为null
?这如何应用于例如char
?我可以做char测试代码>但不<代码>字符测试=空
@xorinzor您不能将null
分配给char
,因为它是一种基本类型。你也不能做char测试代码>在方法内部,不分配测试
。如果需要,您可以执行char test='a'
,或者将其保留为char test在成员声明中使用code>,以获取默认值'\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");
}
}
}