Java对象是可以算是Java学习中遇到的第一个重难点,理解区分Java对象与对象引用的区别,有利于Java今后的学习。
- Java对象与Java对象引用的区别
产生对象的代码是“new FP();”这句代码的含义是:根据类模板产生一个对象,并在计算机内存中为此对象开辟一块新的独立的空间。以类为模板产生的对象,实质上就是将类中定义的属性赋值到生成的对象当中,这些属性虽然在类中定义,实际上是为对象服务,因而称它们为对象属性;而方法在调用时,系统会为方法开辟一个栈空间,用于存放方法中的局部变量和形式参数,并且方法在执行时还能访问复制到对象中的属性,其效果就如同方法也被复制到对象一样。方法执行完毕后,栈空间被释放。
有了对象,人们还希望对对象进行控制,于是就有了“对象引用”:“FP fp;”把对象比喻成电视机,对象就像遥控器一样,对对象起到控制作用。
FP fp=new FP();代码执行的过程是先产生对象,然后将对象赋予声明fp;对象和对象引用不是一个概念,有声明时可以没用对象,当声明被赋予特定对象后,声明就被另一个概念取代——“引用”。
Java对象创建与C++对象创建的区别
Java与C++对象创建语言中都有new,但是含义却大不相同。在 Java 中,只有当你使用 new 操作符时,才会真正在内存中申请一块空间,创建一个新对象,并将该对象绑定到你所定义的变量名上。其它情况下,要么是将已有对象绑定到某个变量名上,要么就是定义的变量名是个空引用,没有绑定任何对象。
也就是说,定义变量名只是创建了一个新的标识符,跟创建对象没有关系,创建对象必须通过 new 来完成,只有创建对象时才会申请内存空间。
但在 C++ 中,当你定义了一个变量 s 时,即使你没有给它赋值,也意味着你不但创建了一个新的标识符,同时还在栈中申请了对应的内存空间。
因此,C++ 中定义的变量名不仅仅是个标识符,还自动关联着栈中的一块内存空间。
而 C++ 中的 new 操作符表示的是在堆中申请内存,因为栈中的内存在运行时期大小是固定且有限的,因此需要动态内存分配的时候就需要用 new 来实现。这类似于 C 里面的 malloc 函数,只不过 new 操作符还封装了其它的操作。
参考资料:https://www.jb51.net/article/128419.htm