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

被折叠的 条评论
为什么被折叠?



