请问java中有堆,堆栈这些概念吗??
比如
类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




