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

解决方案 »

  1.   

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

  2.   

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

  3.   

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

  4.   

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

  5.   

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

  6.   

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

  7.   

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

  8.   

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

  9.   

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

  10.   

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

  11.   

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

  12.   

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

  13.   

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

  14.   

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

  15.   

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

  16.   

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

  17.   

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