CoreJava day3

本文解析了Java中堆内存与栈内存的区别及作用。详细介绍了如何通过new关键字创建对象并将其分配到堆内存中,以及引用变量如何存储在栈内存中。此外,还讨论了垃圾回收机制如何管理堆内存中的对象。

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

站在光明中,只看到黑暗
站在黑暗中,却能看到光明。。
--------------------------------

关于堆内存和栈内存的简单描述:
举例
代码片段如下

...
...
Person p 
= new Person("javier",24);
...


在内存中的分配情况则如下

在一个方法中定义的基本数据类型(Primitive Type)和引用变量类型(Reference Type),都是在栈内存中分配,
也就是说在一个方法(或称函数)中定义的变量,java就会在栈中分配对象空间,超出函数范围(以{...}来区间范围),则会自动释放栈中空间,这就是为什么在函数中定义的局部变量必须赋初值。

而堆中的则是由new关键字产生的对象,它是有垃圾回收器负责的(并不需要程序员参与)。
一旦产生了对象,只要引用存在,对象则存在,引用一旦为null,对象则会在一定时候(不确定时间)被垃圾回收器释放,这也就是为什么java运行比较占用内存的原因。

就像 上面的图, 产生的代码,其中的 引用变量p保存在栈内存中,p中的值保存的是堆内存中它所指向的实例 (instance)的地址的值,只要引用存在,则堆内存中的对象则存在,如果引用消失,参考垃圾回收机制。





Casting(类型转型) :
                                    
                              char
                                |
                                |          
byte   --  short --  int -- long
                               /     /        
                                               
                           float -- double

byte 到 short 到 int 到 long 到 double 的从小到大顺序强制转换不会丢失精度,可以隐式的转换
反之,丢失精度,必须显示转换 如   
long x=10L;
int a = (int)x;

char到 int类型的,也不会丢失精度(特殊)

int ,long,到 float 丢失精度

int 到 double 不丢失
long到double丢失

float  到 double 不丢失

看上去挺多,其实很好理解
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值