比方说,我有一个名为Phone的课程.
有什么区别:
Phone p;
Run Code Online (Sandbox Code Playgroud)
和
Phone p = new Phone(200) //(200 is the price of the phone).
Run Code Online (Sandbox Code Playgroud)
和
new Phone(200)
Run Code Online (Sandbox Code Playgroud)
我已经谷歌搜索,甚至在Eclipse上尝试过,但无法弄明白.
第一个片段仅声明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
Run Code Online (Sandbox Code Playgroud)
对于p要使用,你需要将它实例化(或以其他方式对其进行初始化).声明本身没用.在本地(在方法范围内声明的变量)中,在不首先初始化它的情况下使用它是非法的.如果它是类级别的成员,那么当您尝试访问其任何成员函数时,它将只是一个空指针.
Phone p;只声明一个p不指向任何地方的引用处理程序(它是一个未初始化的,在你为它指定东西之前不能使用[感谢@Anthony]).
Phone p = new Phone(200);声明一个引用处理程序p,它指向一个新创建的Phone对象(初始化为Phone(200)).
new Phone(200)创建一个新Phone对象,但由于没有对它的引用存储在任何地方,它立即有资格进行垃圾收集(除非它的构造函数在某处存储引用,即).
(注意,在Java中,类型为引用类型的所有"变量"实际上都是引用处理程序.只有value-type的变量才包含值.因为Phone是引用类型(它是a class),Phone p所以始终是"引用" Phone".)