'Car myCar = new Car();'之间有什么区别?和'Car myCar;'?

Hel*_*ixS 1 java oop initialization class

找到了初始化书中对象的第二种方法.现在很困惑.

Dav*_*vid 6

这声明了一个变量:

Car myCar;
Run Code Online (Sandbox Code Playgroud)

该变量属于类型Car并被调用myCar.但是,它尚未初始化为任何东西.它是一个Car对象的占位符,但没有放置这样的对象.所以它的价值在于null.

这声明初始化一个实例:

Car myCar = new Car();
Run Code Online (Sandbox Code Playgroud)

您可以在逻辑上将其视为以下两个语句:

Car myCar;
myCar = new Car();
Run Code Online (Sandbox Code Playgroud)

声明并创建变量,将其设置为占位符,并将实例Car放在那里.


编辑: 更具体(我刚刚在这里学到了一些东西),值是null 如果它是一个类级成员.例如:

class MyClass {
    Car myCar;

    void someMethod() {
        // myCar is "null" here
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果它是方法中的局部变量,则会略有不同:

class MyClass {
    void someMethod() {
        Car myCar;
        // myCar is "uninitialized" here.
    }
}
Run Code Online (Sandbox Code Playgroud)

差异主要是语义上的,你不应该担心它,除非你有错误或做了一些奇怪的事情.编译器会告诉您是否尝试使用"未初始化"变量,因为它在初始化之前无法使用.但是null可以使用变量,它的价值很简单null.