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

本文深入探讨了在Java和C++中创建对象的过程及内存分配的区别,详细讲解了对象在堆和栈上的分配机制,以及如何通过实例代码理解这些概念。

首先说明创建对象与初始化对象引用的形式
一:
创建对象: new FighterPlane();
需要注意的是创建对象时的内存分配在堆上。
二:
声明一个对象引用: FighterPlane fp;
此时内存分配在栈上
三:
初始化对象引用: fp=new FighterPlane();

这两者之间就存在区别,堆在应用程序生命周期内一直存在,而栈在方法调用完毕后就释放。而方法执行时用到的局部变量和形式参数则存放到栈空间。
举例: FighterPlane fp=new FighterPlane();
此处用一行代码举例,代码处于静态main方法中,则代码中的fp处于静态main的栈空间,而产生的对象则被分配到堆中。fp作为对象引用能够操控对象的原因是它在栈中保留了堆中对象的实际地址。
程序代码举例:

  public class op{
       private static int a;
       public static void main(String[] args){
           modify(a);
           System.out.println(a);
    }
    public static void modify(int a){
      a++;
    }
    }

程序运行结果为 0。
因为a是op类中的静态变量,初值为0,调用modify方法中发生了参数传递,赋值给modify方法中的形式参数a。此a位于栈空间中,所以a++是对形式参数进行自增,而没有使静态变量a进行增加。
c++中与java中创建对象的区别
FighterPlane fp:
这句代码在java中产生一个FighterPlane的声明,此事并没有任何此类的对象产生,也没有为此类对象分配内存空间。而在c++中不同,在c++中已经产生了一个对象。
C++中用关键字new方式产生的对象在堆中,而用FighterPlane fp方式产生的对象在栈中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值