JAVA中对象与引用的区别,以及创建JAVA对象相比创建C++对象的区别

JAVA中对象和引用是有区别的,我们可以把引用看作遥控器,把对象看作电视机,遥控器通过发射红外线来遥控电视机,在JAVA中我们把发射红外线的过程称为传递消息,即引用通过传递消息来对对象进行相应的操作。
我们来看一个简单的例子:

class FightPlane{
	String name;//战斗机的名字
	int missileNum;//导弹数量
}
class Plane{
    public static void main(String[] args){
    new FightPlane();
    FightPlane fp;
    fp=new FightPlane();
    }
}

在FightPlane这个类之中,有两个类域变量name和missileNum(C++中叫做数据成员)。

当执行:new FightPlane;这条代码时,系统会根据类模板产生一个FightPlane类的对象,并在计算机内存(其实就是在堆之中)为这个对象分配一块新的独立空间,这个空间里面存放着name和missileNum。

当执行:FightPlane fp;这条代码时,系统会创建一个名为fp的FightPlane类型的变量,此时并没有产生FightPlane类的对象fp,fp只是一个变量。

当执行:fp=new FightPlane();这句话时,fp变为了FightPlane类型的引用,存放的是FightPlane类的对象的地址,而fp存放的地方是在main()方法栈里,产生的对象存放在堆之中。可以通过fp来操控产生的那个FightPlane类对象,就像使用fp牌的遥控器来遥控“FightPlane类的对象”牌的电视机一样。

那么这里我要问了,Java中JAVA对象的创建相比C++对象的创建有什么区别呢?
首先,当执行FightPlane fp;这句代码的时候,C++会为立即创建一个FightPlane类的对象fp,并存放在栈之中;而java不会产生对象,此时fp存放的地方也是在栈中。

其次,C++创建对象的两种方式之中,使用new的方式产生的对象,存放在堆之中。使用FightPlane s; 这种形式产生的对象存放在栈之中;而Java的对象则是一直存放在堆中,对象的引用存放在栈之中。

如下例:

class FightPlane{
	String name;//战斗机的名字
	int missileNum;//导弹数量
}
int main(){
    FightPlane s; //定义标识符s,并在栈中申请空间
    FightPlane* s = new FightPlane();  //定义s,并在堆中申请空间,过后需手动释放内存
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值