Java中对象和引用的具体区别
Java中对象和引用的具体区别
初学Java的人,可能在在很长一段时间里,对对象和引用的基本概念都是很模糊的,老是分不清楚两者的区别。下面,学习啦小编给你整理一些有关对象和引用的区别供有需要的人参考。
一、对象与引用的概念
首先小编先解释一条代码更你更快的了解对象和引用的概念区别。
Vehicle veh1 = new Vehicle();
通常把这条语句的动作称之为创建一个对象,其实,它包含了三个动作。
1)右边的“new Vehicle()”,即新建对象本身;
2)左边的“Vehicle veh1”创建了一个Vehicle类的引用变量或称对象引用变量。
所谓Vehicle类引用,就是以后可以用来指向Vehicle对象的对象引用。
3)“=”操作符使对象引用指向刚创建的那个Vehicle对象。
我们可以把这条语句拆成两部分:
Vehicle veh1;
veh1 = new Vehicle();
效果是一样的。这样写,就比较清楚了,有两个实体:一是对象引用变量,一是对象本身。
可以这么说,在Java里都是通过引用来操纵对象的。 这就是两者的区别。
二、对象和引用的具体区别
相互关联体现在:
1)当对象的引用变量指向对象时,他们两就联系起来,改变引用的属性,就会改变对象的属性;
2)如果同一个对象被多个引用变量引用的话,则这些引用变量将共同影响这个对象本身。
相互独立体现在:
3)一个对象可以被不同的引用变量操纵,同时一个引用变量也可以指向不同的对象,但是同一时刻只能指向一个对象;
4)从存储空间上来说,对象和引用也是独立的,对象一般存储在堆中,而引用存储在堆栈(存储速度更快)中。
三、小编举例
为了加深大家的理解,小编再举一个例子具体说明一下两者的区别。
class Vehicle {
int passengers;
int fuelcap;
int mpg;
}
有了这个模板,就可以用它来创建对象,Vehicle veh1 = new Vehicle();
通常把这条语句的动作称之为创建一个对象,其实,它包含了四个动作。
1)右边的“new Vehicle”,是以Vehicle类为模板,在堆空间里创建一个Vehicle类对象(也简称为Vehicle对象)。
2)末尾的()意味着,在对象创建后,立即调用Vehicle类的构造函数,对刚生成的对象进行初始化。构造函数是肯定有的。如果你没写,Java会给你补上一个默认的构造函数。
3)左边的“Vehicle veh1”创建了一个Vehicle类引用变量。所谓Vehicle类引用,就是以后可以用来指向Vehicle对象的对象引用。
4)“=”操作符使对象引用指向刚创建的那个Vehicle对象。
我们可以把这条语句拆成两部分:
Vehicle veh1;
veh1 = new Vehicle();
效果是一样的。这样写,就比较清楚了,有两个实体:一是对象引用变量,一是对象本身。