栈中可以存放对象?

zzwh_0 2006-12-01 09:21:27
public class A
{
public static void main(String[] args)
{
new B().print();
}
}

class B
{
public void print()
{
int i = 7;
C c = new C();
}
}

class C
{
int i = 8;
}
是不是所有的对象都存放在堆中?那在类B中print方法new出的对象放在哪?(栈还是堆)?局部变量不是存放在栈中的吗?它既是局部变量又是对象,到地方哪啊?

...全文
676 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
meconsea 2006-12-02
  • 打赏
  • 举报
回复
JAVA中基本数据类型直接存储在栈中,而复合的数据类型采用引用模型,其引用存储在栈中,而对象存储在堆中。就是所谓 Java把内存划分成两种:一种是栈内存,一种是堆内存。

在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。

当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。

堆内存用来存放由new创建的对象和数组。

在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。

在堆中产生了一个数组或对象后,还可以在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量。

引用变量就相当于是为数组或对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。


当然在堆内存中又分为两种:其中一种堆是用于存放由new创建的对象和数组,
另一种堆是用于存放装载进来的类信息,static变量即存储在这个类信息中。
benq998 2006-12-02
  • 打赏
  • 举报
回复
对象都在堆中,栈中存放的是对应的引用,当方法返回后,对象的引用也不存在了,这是如果没有任何一个引用指向到那个对象,垃圾回收机制会把对象从堆中删除。
fantacyland 2006-12-02
  • 打赏
  • 举报
回复
在堆中
s_topman 2006-12-01
  • 打赏
  • 举报
回复
都在堆中!
Gotop4u 2006-12-01
  • 打赏
  • 举报
回复
在堆里面,栈里面放的是类定义
zzwh_0 2006-12-01
  • 打赏
  • 举报
回复
顶一下
zzwh_0 2006-12-01
  • 打赏
  • 举报
回复
就是看到你的问题我才觉得有这个疑问的,本来我是觉得都在堆中的。:)
我现在又感觉B中的c放栈里了,晕了晕了......
s_topman 2006-12-01
  • 打赏
  • 举报
回复
看来是都在堆中...
s_topman 2006-12-01
  • 打赏
  • 举报
回复
这个是我要问的问题...-_-||

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧