当前页面: 开发资料首页 → J2SE 专题 → 请问java中有堆,堆栈这些概念吗??
请问java中有堆,堆栈这些概念吗??
摘要: 请问java中有堆,堆栈这些概念吗??
比如
类A
然后
A aa = new A();
那么这个aa对象是分配在堆还是堆栈上的呢???
如果在c++中
A * pp = new A();
那么pp就是在栈上的,但是指向的对象是在堆上的,
请问java中是怎么分配的,谢谢了
初学,不好意思阿,不要嫌简单~~
在java中,A这个对象通过NEW以后是被分配到堆里面的,但是指向A对象的aa是在栈里面存放的,它和C++里的指针是一样的。在JAVA里,虽然说是没有指针这一概念的,但是它的内部还是用到指针的
没听说过,那都是数据结构里面的东西,我倒是觉得由于java是纯粹的oo的语言,所以没有看到这些概念了。到底有没有用到,应该还是用到了。学了编译原理都该知道是怎么回事。
这些概念是存在的,不仅仅是在实现层才会涉及到堆和栈。
如果不清楚它们,是很难写出好的程序的,另外我也不相信不明白堆和栈的人能写出好的程序。
建议楼主以String类开始,以小见大。理解相关的概念。
按我的理解,Java 中的 A aa = new A(); 跟 C++ 中的 A * pp = new A(); 几乎是一样的,aa 是在栈上的,而它指向的对象是在堆上的。
哦,谢谢了,不错
不过,由于没有指针,好像java不能做很复杂的操作也,这是我的感觉。我是说对内存的操作,我没搞过。
我做过j2ee,j2se。也可能是没搞过j2me的缘故把,楼主不要见怪。
恩,好的,
谢谢楼上的,呵呵
复杂,没研究过
tianhao1013(黑黑) ( ) 正解
java中的栈不用来存放对象,所有对象都是存放在堆上的。
学习....
我们刚讲了 栈区: 形式参数(方法参数)频繁的数据交换
堆区: new出的对象在堆区
也就是你说 aa 在堆区
我在THINK IN JAVA 里面看到关于这个问题说的是。;
对象是放在堆里面的。放在这里面的最大好处就是非常灵活。但是放在这里面则需要更多的时间。而对象的句柄是放在堆栈里面的。对象和对象的句柄是分开存放的!!!!~
变量,对象的句柄放在栈里。对象放在堆里。
aa就是放在栈里。但是aa所对应的对象则是放在堆里。。。
java的对象都在堆中
学习中.....
简单类型都在stack里,
复杂类型(对象都是)在heap里,
句柄(指针,不过没指针强大的咚咚)在stack里;如:A aa = new A(); aa在stack里
System.out.println(aa.HashCode())可以看到这个对象在内存里的地址(10进制)
具体哪些地址是stack,哪些地址是heap的小弟就不懂了
java中所有的对象都是存在堆中的,这个在《JAVA2核心技术》里有提到,今天刚看了这些内容。java 中的对象变量可以理解为C++中的对象指针,即在楼主的举例中aa就类似于pp。
为什么int和integer,一个是基本类型,一个是引用类型的数据,但是这样定义的数据可以直接相加,是如何自动转换的呢?
大家帮忙解答一下??
大家帮忙解答一下??
Java中和C++差不多。
A aa = new A();
aa这个引用是在Java虚拟机实现的栈上的,而aa指向的对象是建立在堆中的。
但是你声明基本类型的时候,比如:
int i= 1;
这个i就是分配在栈上的一小段了。
JAVA数据类型可以自动转换的
为什么int和integer,一个是基本类型,一个是引用类型的数据,但是这样定义的数据可以直接相加,是如何自动转换的呢?
//这两者之间的处理是不同的,能自动转换是在JDK5.0下的新特性;是由编译器帮你完成了转换过程;
对象是放在堆里面的。放在这里面的最大好处就是非常灵活。但是放在这里面则需要更多的时间。而对象的句柄是放在堆栈里面的。对象和对象的句柄是分开存放的
java.util.Stack 这个是栈
和C++ 一样
类A
A aa = new A(); //aa这个变量的值是引用,指向堆中的对象A
JAVA中这些概念是有的;
而且对于性能的改进以及对象的生命周期的认识都有帮助的;
最简略的说:
堆是存放对象的内存区域
栈是存放常量、引用等的内存区域
mark
昨天回的第二个贴是错误的!!!!
aa是被放在栈里面的。。aa是实例化的对象 抽象的放在堆里面
好