java堆与栈区别

本文介绍了Java中的数据类型及内存分配方式,包括基本数据类型和引用数据类型的内存分布,探讨了堆内存的作用及其如何处理new操作符创建的对象。同时,文章还讨论了局部变量与成员变量的区别以及方法调用时的值传递机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

①Java数据类型: 基本数据类型:4个整数类型:byte、short、int、long 2个浮点类型:float、double 1个字符类型:char 引用数据类型:String s; s=new String("Hello world"); Mouse m;

 

②基本数据类型在内存中:只占1块内存。引用数据类型在内存中:占2块内存

 

③堆内存装的是所有new出来的东西。堆内存比较大,用来动态分配内存用的。

 

④例子: String s; //JVM根据内容“hello”查找对象,如果没找到,则在heap堆中创建一个新对象并将其赋值给s; //否则使用已经存在的对象 s=new String("Helllo world"); //使用new语句创建一个String类型的对象,并让s指向它,以后可以通过s完成对其操作 //JVM直接在heap上创建新的对象,所以在heap中会出现内容相同,但地址不同的String对象

 

⑤例子: Dog d=new Dog(); 实际上new出来的Dog在堆内存里面,变量d是对Dog这个对象的引用,d可能在堆内存里面,也可能在其它内存里面;

 

⑥ * 类是一个人静态的概念,他是放在代码区里面 * 对象是new出来的,位于堆内存中,只有在运行期间,才知道内存要分配多大,所以把对象放在堆内存中,堆内存比较大;如果对象不用了 ,垃圾收集器收回去; * 类的每个成员变量在不同的对象都有不同的值(除了静态变量),而方法只有一份,执行的时候才占用内存,方法不调用就是一堆代码

 

⑦ 问题:为什么对象位于堆内存? 因为堆内存是用来动态分配内存的,只有在运行的过程中,我们才new一个对象放在堆内存中。运行过程是指输出:java HelloWorld命 令 ,而不是javac HelloWorld.java编译命令。

 

 

⑧:局部变量:方法或语句块内部定义的变量 成员变量:方法外部、内的内部定义的变量

 

⑨ C c1=new C(); C c2=new C(); c1、c2都是方法里定义的变量,为局部变量,存在: 栈stack

 

⑩ 成员变量、对象都存在: 堆heap 局部变量存在: 栈stack static变量和字符串常量存放在: 数据块 代码存放在: 代码块

 

①① 使用new+构造方法,创建一个新的对象 构造方法是定义在Java类的一个用来初始化对象的函数 构造方法与类同名且没有返回值

 

①② 方法调用:值传递 int date=9 ; test.change(date) public void change(int i) { i=1234 } 通过change()是改变不了date最初的值的。 只有通过setDate()方法才可改变

 

①③ 方法一旦执行完毕,由方法分配的局部变量的内存将自动消失;Dog d=new Dog();这个局部变量不是马上就消失,而是待会由垃圾收集器回收消失

 

①④ public Dog(String color,int leg){ this.color=color; this.leg=leg; } 形参和局部变量同等对待,放在栈内存中

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值