java对象引用与java对象的区别
首先说明创建对象与初始化对象引用的形式 一: 创建对象: 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方式产生的对象在栈中。
上一篇:
IDEA上Java项目控制台中文乱码