比方说,我有一个名为Phone的课程。
有什么区别:
Phone p;
和
Phone p = new Phone(200) //(200 is the price of the phone).
和
new Phone(200)
我用谷歌搜索过,甚至在Eclipse上尝试过但无法理解它。
答案 0 :(得分:5)
第一个代码段仅声明具有给定类型p
的变量Phone
。您尚未创建任何对象,只创建了变量。
第三个实例化一个新的Phone
对象(未分配给变量)。
第二个将声明和实例化两者合并为一行代码。
Phone p; // declaration of variable
p = new Phone(200); // instantiation of object, assigned to variable
Phone p = new Phone(200); // declaration and instantiation in a single line
要使用p
,您需要实例化它(或以其他方式初始化它)。声明本身没用。在本地(在方法范围内声明的变量)中,在不首先初始化它的情况下使用它是非法的。如果它是类级别成员,那么当您尝试访问其任何成员函数时,它将只是一个空指针。
答案 1 :(得分:5)
Phone p;
只声明一个引用处理程序p
,它不指向任何地方(它是一个未初始化的,在你为它分配东西之前不能使用[感谢@Anthony])。
Phone p = new Phone(200);
声明一个引用处理程序p
,它指向一个新创建的Phone
对象(用Phone(200)
初始化)。
new Phone(200)
创建一个新的Phone
对象,但由于没有对它的引用存储在任何地方,它立即有资格进行垃圾收集(除非它的构造函数在某处存储引用,即)。 p>
(注意,在Java中,类型为引用类型的所有“变量”实际上都是引用处理程序。只有value-type的变量才包含值。因为Phone
是引用类型(它是class
),Phone p
始终是“对Phone
的引用”。)
答案 2 :(得分:1)
Phone p
是对尚未初始化的Phone对象的引用。
Phone p = new Phone(200)
是对使用构造函数Phone(int var)
启动的Phone对象的引用。
new Phone(200)
使用构造函数Phone(int var)
创建一个新的Phone对象。
答案 3 :(得分:1)
Phone p;
只是一个引用或“指针”,因为有些人喜欢C语言会调用它。它包含对象的路径,但当前路径为空。
Phone p = new Phone(200) //(200 is the price of the phone).
在这里,您将通过调用其取值为200的构造函数来创建新的Phone对象。然后将该对象分配给参考p。
new Phone(200)
这里你只是创建一个Phone类型的Object,但是没有对它的引用,所以这个对象又是JVM收集的垃圾(如果没有在内部引用其他东西)。
问候!
答案 4 :(得分:0)