java中new出来的对象的储存问题!

qq_27558803 2016-09-11 12:00:26
1。我想问下,new出来的对象储存在堆中,堆中储存的是这个对象的内存地址,还是对象的实体???求解惑。
2。还有int i=1,如果这是个成员变量。这个1储存在哪里?
...全文
580 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
肃穆丶 2016-09-12
  • 打赏
  • 举报
回复
堆中是对象的实体。
变量名 里存的是地址。
i是成员变量,放在常量池
Jerry_CW 2016-09-12
  • 打赏
  • 举报
回复
第一:在Java中堆中存储的是对象实体 因为堆内存可以被虚拟机动态的分配内存大小 无需事先告诉编译器的数据的大小 生命周期等相关信息 编译器不需要知道数据存活多长时间 第二:引用存放的是Stack 因为栈内存被要求存放在其中的数据的大小 生命周期必须是已经确定的 对象引用变量存储的实际是其所指向对象在内存中的内存地址而内存地址实际上也是一串二进制的数据 第三:基本数据类型是存储的一组位数不同的二进制数据 已经确定的 所以存放在Stack
day_moon 2016-09-11
  • 打赏
  • 举报
回复
1、地址 public void newTest(){ User u = new User(); // u就是一个地址而已 =在内存中new出来一块空间 User d = u; u.setName("66"); System.out.println(d.getName()); //66 } 2、堆
绿树苍天 2016-09-11
  • 打赏
  • 举报
回复
堆中是对象的实体。 变量名 里存的是地址。 成员变量应该是临时的,方法结束后销毁,1存在堆吧我觉得
bd7xzz 2016-09-11
  • 打赏
  • 举报
回复
1.new出来的对象根据不同jvm实现分句柄和直接指针,句柄的话会保存实例空间地址+类所在方法区的地址,直接指针的话就是直接指向的实例空间地址,里面一部分保存了实际数据,另外一部分存放类所在方法区地址。 2.int i=1; 1被放在了虚拟机栈中的局部变量表中。会随着栈销毁而销毁。
纵骑横飞 2016-09-11
  • 打赏
  • 举报
回复

A a=new A();
a叫做引用,放在栈中,new 出来的A() 是一个 对象 ,
这句话的意思是 把new出来的A型对象地址分配给a

但是我们用a的时候,a用地址找到A对象并使用


int i=1; 1放在方法区的常量池

一般我们简单的描述一个Jvm使用空间是这么分的:



为什么叫常量池,是常量就到里边去找,没有就扔进去。这还和堆中存放的方式有一点差别,如果想了解就说






62,626

社区成员

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

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