0

创建像这样的对象有什么区别

OverFlow a = new OverFlow();

OverFlow a;
4

8 回答 8

2

在第二种情况下,不创建任何对象。a变量保持未初始化。

于 2012-04-27T18:47:11.617 回答
1

OverFlow a

bit 在这两种情况下具有相同的含义:它创建一个名为的变量,该变量存储对类(或子类)a实例的引用。OverFlow

在第一种情况下,创建了一个新对象,并将引用初始化为指向该对象。

在第二种情况下,引用未初始化并保持不变null

于 2012-04-27T18:48:46.493 回答
1
OverFlow a;

等于

OverFlow a = null;
于 2012-04-27T19:03:54.277 回答
0
new OverFlow();

确实创建了一个 OverFlow 类的实例,而

OverFlow a;

只是一个声明。

于 2012-04-27T18:47:20.890 回答
0

在第一个中,“a”具有新构造的溢出对象的值。

在第二个中,它是空的。

于 2012-04-27T18:47:52.437 回答
0

当您创建一个对象而不将其定义为新对象时,它将不会被初始化(也不会调用构造函数。)。您应该只使用第二个版本在 try-catch-block 中创建对象。

于 2012-04-27T18:48:32.183 回答
0

OverFlow a;不创建对象(即您可以使用的实例)。它只定义a具有类型的变量,OverFlow但它将被分配给null. 如果您尝试使用它,您将因此得到 NullPointerException。根据您的编译器,它也很可能会给您一个“未初始化”变量警告。

OverFlow a = new OverFlow();做同样的事情,除了它创建一个可以使用的实际对象(非空)。

于 2012-04-27T18:49:06.607 回答
0

基本上,

OverFlow a;

告诉编译器,“最终会有一个类型溢出的变量,所以要做好准备。”

OverFlow a = new Overflow();

实际上分配了存储变量所需的内存并为其调用构造函数

于 2012-04-27T19:03:28.933 回答