Java对象与Java对象引用的区别

一、什么是对象? 引自《Java编程思想》中的一段原话:“按照通俗的说法,每个对象都是某个类(class)的一个实例(instance),这里,‘类’就是‘类型’的同义词。”对象通常与类联系起来,对象是对客观事物的抽象,类是对对象的抽象。它们的关系是,对象是类的实例,类是对象的模板。 二、什么是对象引用? 同样引用《Java编程思想》的一段话,“每种编程语言都有自己的数据处理方式。有些时候,程序员必须注意将要处理的数据是什么类型。你是直接操纵元素,还是用某种基于特殊语法的间接表示(例如C/C++里的指针)来操作对象。所有这些在 Java 里都得到了简化,一切都被视为对象。因此,我们可采用一种统一的语法。尽管将一切都“看作”对象,但操纵的标识符实际是指向一个对象的“引用”(reference)。” 对象与对象引用有着本质上的区别。 三、创建对象

Student s=new Student();

也可以写成

Student s;
s=new Student();

1.创建对象:new Student();(分配在堆上) 2.声明一个对象引用:Student s;(分配在栈上) 3.初始化对象引用:s=new Student(); 实质是将新创建的Student对象的地址付给对象引用s,从此s与该对象关联,通过s即可操作该对象。通过对象引用给对象发送消息,即调用对象的方法(操作)。 Student s;,这句话只是声明了一个Student类的引用,它可以指向任何Student类的实例。这个道理就和下面这段代码一样:

int a;
a=1;

这里先声明了一个int类型的变量a,再对a赋值为1。 一个引用可以指向多个对象,而一个对象也可以被多个引用所指

Student s1=new Student();
Student s2=s1;

s1和s2都指向了Student这个对象。 例如

Student s=new Student("01");
Student s1=new Student("02");
Student s2=s;
Student s3;
s3=s1;

对象s,s1,s2,s3在内存中的布局: Java对象的创建与C++对象创建的区别: C++不像Java那样直接通过new就可以创建对象了,而且还不需要人为的去回收. C++创建对象有两种方式,在栈上创建对象和在堆上创建对象。 1.在栈上创建对象(Objects on the Stack): 语法:

Student student;

此种创建方式,使用完后不需要手动释放,该类析构函数会自动执行。而new申请的对象,则只有调用到delete时再会执行析构函数,如果程序退出而没有执行delete则会造成内存泄漏。而这种情况只能通过(student.成员函数)来调用,不可使用->调用。,范围内的栈中的对象会自动删除,内存自动回收。 2.在堆上创建对象(Objects on the Heap): 语法:

Student* p= new Student();

delete p;

p用来接收类对象指针。这种情况可以使用(p->成员函数或(*p).成员函数)来调用。在堆中的对象不会自动删除,内存不会自动回收,所以new一个对象使用完毕,必须调用delete,释放内存空间。也就是说,new和delete必须成对出现。

经验分享 程序员 微信小程序 职场和发展