CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

请问java中有堆,堆栈这些概念吗??

楼主handsomerun(毛毛)2006-09-25 09:14:56 在 Java / J2SE / 基础类 提问

比如  
   
  类A  
   
  然后  
   
  A   aa   =   new   A();  
   
   
  那么这个aa对象是分配在堆还是堆栈上的呢???  
   
   
  如果在c++中  
   
  A   *   pp   =   new   A();  
   
  那么pp就是在栈上的,但是指向的对象是在堆上的,  
  请问java中是怎么分配的,谢谢了  
   
  问题点数:50、回复次数:32Top

1 楼handsomerun(毛毛)回复于 2006-09-25 09:15:29 得分 0

初学,不好意思阿,不要嫌简单~~Top

2 楼tianhao1013(黑黑)回复于 2006-09-25 09:29:06 得分 5

在java中,A这个对象通过NEW以后是被分配到堆里面的,但是指向A对象的aa是在栈里面存放的,它和C++里的指针是一样的。在JAVA里,虽然说是没有指针这一概念的,但是它的内部还是用到指针的Top

3 楼fangtaohbjjxy(想学单片机)回复于 2006-09-25 09:33:07 得分 0

没听说过,那都是数据结构里面的东西,我倒是觉得由于java是纯粹的oo的语言,所以没有看到这些概念了。到底有没有用到,应该还是用到了。学了编译原理都该知道是怎么回事。Top

4 楼healer_kx(甘草(楼主揭贴吧,我们这些上班灌水的也不容易))回复于 2006-09-25 09:36:55 得分 5

这些概念是存在的,不仅仅是在实现层才会涉及到堆和栈。  
  如果不清楚它们,是很难写出好的程序的,另外我也不相信不明白堆和栈的人能写出好的程序。  
   
  建议楼主以String类开始,以小见大。理解相关的概念。  
  Top

5 楼maquan('ma:kju)回复于 2006-09-25 09:52:02 得分 5

按我的理解,Java   中的   A   aa   =   new   A();   跟   C++   中的   A   *   pp   =   new   A();   几乎是一样的,aa   是在栈上的,而它指向的对象是在堆上的。  
  Top

6 楼handsomerun(毛毛)回复于 2006-09-25 10:12:07 得分 0

哦,谢谢了,不错Top

7 楼fangtaohbjjxy(想学单片机)回复于 2006-09-25 10:32:53 得分 5

不过,由于没有指针,好像java不能做很复杂的操作也,这是我的感觉。我是说对内存的操作,我没搞过。  
  我做过j2ee,j2se。也可能是没搞过j2me的缘故把,楼主不要见怪。Top

8 楼handsomerun(毛毛)回复于 2006-09-25 10:39:33 得分 0

恩,好的,  
  谢谢楼上的,呵呵  
   
  Top

9 楼strawbingo(避世稻草)回复于 2006-09-25 11:06:08 得分 0

复杂,没研究过Top

10 楼DeepNightTwo(深夜两点)回复于 2006-09-25 13:18:07 得分 0

tianhao1013(黑黑)   (   )   正解  
  java中的栈不用来存放对象,所有对象都是存放在堆上的。Top

11 楼likgrj(java游客)回复于 2006-09-25 13:20:21 得分 0

学习....Top

12 楼xql80329()回复于 2006-09-25 17:22:38 得分 0

我们刚讲了       栈区:   形式参数(方法参数)频繁的数据交换  
                            堆区:   new出的对象在堆区Top

13 楼xql80329()回复于 2006-09-25 17:24:11 得分 0

也就是你说   aa     在堆区Top

14 楼tenderBOA(BOA)回复于 2006-09-25 21:29:32 得分 5

我在THINK   IN   JAVA   里面看到关于这个问题说的是。;  
          对象是放在堆里面的。放在这里面的最大好处就是非常灵活。但是放在这里面则需要更多的时间。而对象的句柄是放在堆栈里面的。对象和对象的句柄是分开存放的!!!!~Top

15 楼john_sheep(彩虹勇士(结贴就那么难么?))回复于 2006-09-25 21:34:44 得分 5

变量,对象的句柄放在栈里。对象放在堆里。  
  aa就是放在栈里。但是aa所对应的对象则是放在堆里。。。Top

16 楼galois_godel()回复于 2006-09-25 21:49:13 得分 0

java的对象都在堆中Top

17 楼rabbitpet(龙井)回复于 2006-09-25 21:53:40 得分 0

学习中.....Top

18 楼wqrz(滑步向左)回复于 2006-09-25 21:56:47 得分 5

简单类型都在stack里,  
  复杂类型(对象都是)在heap里,  
  句柄(指针,不过没指针强大的咚咚)在stack里;如:A   aa   =   new   A();       aa在stack里  
   
  System.out.println(aa.HashCode())可以看到这个对象在内存里的地址(10进制)  
  具体哪些地址是stack,哪些地址是heap的小弟就不懂了  
  Top

19 楼buffon001(门神)回复于 2006-09-25 22:11:03 得分 5

java中所有的对象都是存在堆中的,这个在《JAVA2核心技术》里有提到,今天刚看了这些内容。java   中的对象变量可以理解为C++中的对象指针,即在楼主的举例中aa就类似于pp。Top

20 楼yinsheng2005()回复于 2006-09-25 22:21:32 得分 0

为什么int和integer,一个是基本类型,一个是引用类型的数据,但是这样定义的数据可以直接相加,是如何自动转换的呢?Top

21 楼yinsheng2005()回复于 2006-09-25 22:22:03 得分 0

大家帮忙解答一下??  
  大家帮忙解答一下??  
   
  Top

22 楼iambic()回复于 2006-09-25 22:47:53 得分 5

Java中和C++差不多。  
   
  A   aa   =   new   A();  
   
  aa这个引用是在Java虚拟机实现的栈上的,而aa指向的对象是建立在堆中的。  
   
  但是你声明基本类型的时候,比如:  
   
  int   i=   1;  
   
  这个i就是分配在栈上的一小段了。  
  Top

23 楼royeleo(煨灶猫||(只要一颗★))回复于 2006-09-26 10:35:58 得分 0

JAVA数据类型可以自动转换的Top

24 楼huyc_fly()回复于 2006-09-26 10:44:49 得分 0

为什么int和integer,一个是基本类型,一个是引用类型的数据,但是这样定义的数据可以直接相加,是如何自动转换的呢?  
  //这两者之间的处理是不同的,能自动转换是在JDK5.0下的新特性;是由编译器帮你完成了转换过程;Top

25 楼tiankai1983()回复于 2006-09-26 10:46:58 得分 0

对象是放在堆里面的。放在这里面的最大好处就是非常灵活。但是放在这里面则需要更多的时间。而对象的句柄是放在堆栈里面的。对象和对象的句柄是分开存放的Top

26 楼wxinw(网际浪子)回复于 2006-09-26 10:56:14 得分 0

java.util.Stack   这个是栈Top

27 楼zgysc(翠湖寒)回复于 2006-09-26 11:42:57 得分 0

和C++   一样Top

28 楼wmzsl(王明哲)回复于 2006-09-26 12:58:26 得分 0

类A  
   
  A   aa   =   new   A();     //aa这个变量的值是引用,指向堆中的对象A  
   
   
   
  Top

29 楼crazycy(崔毅,blog:http://www.blogjava.net/crazycy/)回复于 2006-09-26 13:18:10 得分 5

JAVA中这些概念是有的;  
   
  而且对于性能的改进以及对象的生命周期的认识都有帮助的;  
   
  最简略的说:  
  堆是存放对象的内存区域  
  栈是存放常量、引用等的内存区域Top

30 楼huaxiaoxi()回复于 2006-09-26 13:33:51 得分 0

markTop

31 楼xql80329()回复于 2006-09-26 14:58:29 得分 0

昨天回的第二个贴是错误的!!!!      
  aa是被放在栈里面的。。aa是实例化的对象         抽象的放在堆里面Top

32 楼Preamble(Rubbish)回复于 2006-09-26 20:51:28 得分 0

好Top

相关问题

关键词

得分解答快速导航

  • 帖主:handsomerun
  • tianhao1013
  • healer_kx
  • maquan
  • fangtaohbjjxy
  • tenderBOA
  • john_sheep
  • wqrz
  • buffon001
  • iambic
  • crazycy

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo