日期:2014-05-20  浏览次数:20771 次

java对象放在堆中,在线等
public class Book{
  long id;
  String name;
  String isbn; //书号
  String[] authors; //作者
  double price;
  }

java文件中,Book对象是放在堆中,
现问
1 book中的 id name 等变量是放在哪呢
2 book中的 id name 等变量存放有顺序吗
thanks

------解决方案--------------------
Book对象放在堆中,id, name是Book对象的一部分,当然是在堆中了
------解决方案--------------------
你就不用关注他们的存储顺序了。
------解决方案--------------------
探讨

1楼的,
id, name存放,有顺序吗,

------解决方案--------------------
局部变量存栈,对象本身存堆,这段代码要是在方法中执行的,就是放在栈上,如果book是成员变量,则放堆上
------解决方案--------------------
Book book =new Book();
这句代码如果是在一个方法中出现,那么Book book则会反应到java栈中的本地变量中,作为一个reference类型数据出现。而new Book()这部分则反应到java堆中,形成了一块存储了Object类型所有实例数据值的结构化内存,,另外,java堆中还必须包含能查找到此对象类型数据(对象类型、父类、实现的接口、方法等)的地址信息,这些类型数据则存储在方法区中。
------解决方案--------------------
对象在内存中的存储结构是未知的,不同的jvm实现可以按照自己的需求选择存储结构
------解决方案--------------------
所有的局部变量都可以说是都放在栈内存中的 你上面所写的变量都是放在栈内存中的
对内存中存放的是占内存中的引用变量所指向的空间
就这两个而言
String isbn; //书号 这是指向字符串缓冲池的
String[] authors; //作者 这是指向堆内存中的


book中的 id name 等变量存放有顺序吗?
你说栈内存有顺序吗!!!!其实有无顺序不重要,当程序运行完,整个都会释放掉的

------解决方案--------------------
java的所有对象都存放在堆中,book是一个对象,当然放在堆中。但是他有两个基本类型的成员属性id、price,JVM为了效率,将他们的直接以值的方式放在堆栈中。
------解决方案--------------------
放在new的对象里,new出来的对象名可看做局部变量放在stack中 栈
 对象名创建的同时 也创建了一个对象,在heap中 堆 成员变量在堆里 也就是你所创建的那个对象里!
------解决方案--------------------
Book是一个类,那个id,name等应该叫做属性而不是变量,new出来的东西都是放在堆内存中的。栈内存中存的是对象名和地址值,指向堆内存中的对象。而id,name作为对象的属性当然是属于对象的一部分,他们作为对象的一部分存在对内存中,如果你new的时候没有给出这些属性值,系统会给出默认值,当你给定了,就会用你给定的代替默认的。
------解决方案--------------------
当你创建了一个Book类的对象book即Book book=new Book();后,计算机内部会有如下操作:
1,在栈内存中开辟一块空间,叫book。
2,在堆内存中开辟一个空间创建一个Book的实例,叫new Book,这个时候会调用Book类的构造函数,由于你的类定义的时候没有写构造函数,所以会调用默认的无参构造,然后就创建了这个Book类的对象,对象的那些属性如id,name等就会用默认初始化值,同时会返回这个对象的地址值,返回给栈内存中的book。就算完成了。
当你调用book的时候,系统会根据book里面存的地址值找到堆中的那个对应的对象,对象里会有各个属性。