java中对象的成员变量时如何在内存中储存的

舞底心颜 2013-03-26 10:29:59
class t {
public int a;
public int b;
}
public class swap {
public static void main(String[] args){
t ti = new t();
ti.a = 5;
ti.b = 6;
System.out.println(ti.a);
System.out.println(ti.b);
swap ( ti );
System.out.println(ti.a);
System.out.println(ti.b);
}
public static void swap (t ti) {
int c;
c = ti.a;
ti.a = ti.b;
ti.b = c;
}
}

李刚的《疯狂java讲义》上讲对成员变量ti.a ti.b存储在堆内存中,栈内存中存放对堆内存的引用。但在马士兵的视频中讲非引用变量都存储在栈内存中,到底是如何存储的啊。小弟刚学java,诚心求教。
...全文
610 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
java的内存分为两类,一类是栈内存,一类是堆内存(其实这样讲是不完整的,但是国内基本都这样讲)。栈内存是指程序进入一个方法时,会为这个方法单独分配一块私属存储空间,用于存储这个方法内部的局部变量,当这个方法结束时,分配给这个方法的栈会释放,这个栈中的变量也将随之释放。 堆是与栈作用不同的内存,一般用于存放不在当前方法栈中的那些数据,例如,使用new创建的对象都放在堆里,所以,它不会随方法的结束而消失。方法中的局部变量使用final修饰后,放在堆中,而不是栈中。
龙四 2013-03-27
  • 打赏
  • 举报
回复
引用 1 楼 followme_1987 的回复:
8个原生数据类型的局部变量储存在栈中,成员变量储存在堆中
sorry,看错楼层了,我指的楼主的最后一段话
龙四 2013-03-27
  • 打赏
  • 举报
回复
ls纯属在扯淡。

JVM规范并没有规定对象的内存布局,不同的JVM实现可以自由选择,这里是hotspot的对象:http://www.infoq.com/cn/articles/jvm-hotspot
Ganymede 2013-03-27
  • 打赏
  • 举报
回复
8个原生数据类型的局部变量储存在栈中,成员变量储存在堆中

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧