jvm栈

本文深入探讨了计算机内存中栈和堆的区别,特别是在处理基本数据类型和对象引用时的不同方式。详细解释了栈如何存储基本数据类型及其效率,以及堆如何通过对象引用处理更复杂的数据结构,包括字符串实例化时的特殊行为。

栈存放内容

1.基本数据类型

类似于  key : value   ,

int a= 3;

直接在栈内 写入  a   与   3,  因为基本数据类型大小较小,所以比较高效,

注意

如果声明的值一致

类似 int a=3, b=3;

此时a与b还是相互独立的。

 

2.对象引用

不是基本数据类型了, 是一个对象(Object) 引用 (reference)

对象需要实例化, new, 需要占用地址, 这个地址在  堆  里

所以栈里存放的是  对象引用

eg:

String a=new String("abc")

那么栈里存放的是  a  与  指向 "abc"的引用, 可能是地址,可能是句柄

注意

如果不使用关键字new

eg:

String a="123";

String b="123"

声明b时,就不会再在堆里重新申请对象了

这时, 栈里 a 与 b  的引用值相同, 都指向同一个对象

a==b为true

 

如果

String a=new String ("123")

String b=new String ("123")

这时,栈里 a 与 b的引用 就不同了

所以a==b  为false

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值