-5
1.  Student student;

2.  Student student = new Student();

只是在这些之间感到困惑。:D

我都试过了,但仍然不知道有什么区别。

4

8 回答 8

2
Student student;

只需声明studenttype 的引用变量Student。此时studentnull

Student student = new Student();

将创建Student类的新对象并分配对student.

new 运算符通过为新对象分配内存并返回对该内存的引用来实例化一个类。new 运算符还调用对象构造函数。
短语“实例化一个类”与“创建一个对象”含义相同。

在此处输入图像描述

于 2013-10-23T09:19:20.047 回答
1

Student student;声明一个名为studentis 的变量,其类型为Student. 它将具有默认值null

Student student = new Student();声明了一个名为studenttype的变量Student,但它也为它分配了一个新构造的 Student 对象。

这类似于我告诉你的x是“数字”或x“数字 5”之间的区别。使用Student student;, student 只是对不指向任何内容的学生的引用。它只是一个可以指向Student. Student student = new Student();Student指向特定 Student的引用。

于 2013-10-23T09:00:24.520 回答
1

是的,有很大的不同!

1) 创建参考

Student student;

该命令将告诉 Java VM 创建一个包含引用的字段。但是此时,没有存储对象,所以这个引用将无处可去——你会经常看到这是一个 NullPointerException。

2)创建类的实例

new Student();

此命令将调用您的构造函数(或 Java 的默认构造函数)并创建您的类的新实例,该实例具有自己的字段和内容。

3) 将实例分配给字段

Student student;
student = new Student();

一起使用此命令,您正在为对象保留空间,并将其创建为下一步。创建后,对该对象的引用将保存在您的学生字段中。

如果把这两行写成一个,看起来是这样的,但是意思是一样的:

Student student = new Student();
于 2013-10-23T09:05:56.543 回答
0

已经提到,但无法抗拒自己:

1 是声明一个 var 类型的 Student。

2 也在声明和定义它。

于 2013-10-23T09:04:38.407 回答
0

是的,它们不同Student student;只是创建了一个引用,其中Student student = new Student();创建了一个对象并占用了一些内存

于 2013-10-23T08:59:56.757 回答
0

Student student;

您只需定义变量的类型。它包含现在的null价值。

Student student = new Student();

这个设置变量类型并为其分配新值,student不再是null

于 2013-10-23T09:00:26.960 回答
0
1.  Student student;

在此您只是创建参考

2.  Student student = new Student();

在此您正在分配对象。

于 2013-10-23T09:01:31.840 回答
0

第一个是指针(即它指向 Student 对象),但它为空,表示无处指向(没有保留地址空间)。第二个是指向完整“学生”对象的指针,并且为该对象保留内存地址(表示内存分配)。因此,如果您尝试引用第一个,您将得到 NullPointerException,但第二个是有效对象。

于 2013-10-23T09:06:01.413 回答