【问题标题】:What's the difference between 'Car myCar = new Car();' and 'Car myCar;'?'Car myCar = new Car();' 有什么区别?和“汽车我的汽车;”?
【发布时间】:2016-03-08 14:55:44
【问题描述】:

在书中找到了第二种初始化对象的方法。现在很迷茫。

【问题讨论】:

标签: java class oop initialization


【解决方案1】:

这声明了一个变量:

Car myCar;

该变量的类型为Car,称为myCar。但是,它还没有被初始化为任何东西。它是Car 对象的占位符,但没有放置这样的对象。所以它的null

这声明了并且初始化了一个实例:

Car myCar = new Car();

你可以在逻辑上把它想象成以下两个语句合二为一:

Car myCar;
myCar = new Car();

一个变量被声明和创建,设置为一个占位符,一个Car的实例被放在那里。


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

class MyClass {
    Car myCar;

    void someMethod() {
        // myCar is "null" here
    }
}

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

class MyClass {
    void someMethod() {
        Car myCar;
        // myCar is "uninitialized" here.
    }
}

区别主要是语义上的,您不应该担心它,除非您有错误或正在做奇怪的事情。编译器会告诉您是否尝试使用“未初始化”变量,因为在初始化之前无法使用它。但是可以使用null 变量,它的值就是null

【讨论】:

  • 如果你声明了一个局部变量并且没有初始化它,它就不是null。它未初始化。
【解决方案2】:

第一条语句定义了一个变量,并通过构造一个新的 Car 实例为其赋值。第二个只是简单地定义了一个变量而不给它分配一个值;

【讨论】:

    【解决方案3】:

    Car myCar;这不会初始化对象,只是声明它。

    在声明中Car myCar;如果 myCarinstance 变量,则 myCar 的值为 null。它没有指向内存中的任何对象。您可以在第一次使用它之前声明变量并初始化它,否则它会抛出一个NullPointerException

    在语句Car myCar = new Car();中,有一个对象在内存中创建,名称为myCar,属于Car类。

    声明:声明说明变量的类型及其名称。一个变量只能声明一次。编译器使用它来帮助程序员避免错误,例如将字符串值分配给整数变量。在读取或分配变量之前,必须先声明该变量。

    See this

    【讨论】:

    • Car myCar; 如果这是一个局部变量,myCar 不是null;它未初始化。
    • 是的,你是对的。我将更新实例和局部变量之间的差异
    猜你喜欢
    • 2010-11-13
    • 1970-01-01
    • 2018-10-13
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 2018-01-12
    相关资源
    最近更新 更多