我在THINK IN JAVA 里面看到关于这个问题说的是。; 对象是放在堆里面的。放在这里面的最大好处就是非常灵活。但是放在这里面则需要更多的时间。而对象的句柄是放在堆栈里面的。对象和对象的句柄是分开存放的!!!!~
变量,对象的句柄放在栈里。对象放在堆里。 aa就是放在栈里。但是aa所对应的对象则是放在堆里
简单类型都在stack里, 复杂类型(对象都是)在heap里, 句柄(指针,不过没指针强大的咚咚)在stack里;如:A aa = new A(); aa在stack里System.out.println(aa.HashCode())可以看到这个对象在内存里的地址(10进制) 具体哪些地址是stack,哪些地址是heap的小弟就不懂了
如果不清楚它们,是很难写出好的程序的,另外我也不相信不明白堆和栈的人能写出好的程序。建议楼主以String类开始,以小见大。理解相关的概念。
我做过j2ee,j2se。也可能是没搞过j2me的缘故把,楼主不要见怪。
java中的栈不用来存放对象,所有对象都是存放在堆上的。
堆区: new出的对象在堆区
对象是放在堆里面的。放在这里面的最大好处就是非常灵活。但是放在这里面则需要更多的时间。而对象的句柄是放在堆栈里面的。对象和对象的句柄是分开存放的!!!!~
aa就是放在栈里。但是aa所对应的对象则是放在堆里
复杂类型(对象都是)在heap里,
句柄(指针,不过没指针强大的咚咚)在stack里;如:A aa = new A(); aa在stack里System.out.println(aa.HashCode())可以看到这个对象在内存里的地址(10进制)
具体哪些地址是stack,哪些地址是heap的小弟就不懂了
//这两者之间的处理是不同的,能自动转换是在JDK5.0下的新特性;是由编译器帮你完成了转换过程;
堆是存放对象的内存区域
栈是存放常量、引用等的内存区域
aa是被放在栈里面的。。aa是实例化的对象 抽象的放在堆里面