为了账号安全,请及时绑定邮箱和手机立即绑定

Java的object储存在哪里?

Java的object储存在哪里?

撒科打诨 2019-02-06 15:07:17
我在看书的时候看到书上说,当执行Dog d = new Dog()的时候,d 所持的并不是一个object,而是如何达到这个object的路径。再比如,当执行d.bark()的时候,实际意思是说 "use the object referenced by the variable d to invoke the bark() method."(用d所指向的对象激发bark()方法。)-不太知道有些东西中文怎么说,翻译的比较粗糙不好意思。那么,d所指的object储存在什么地方呢?
查看完整描述

2 回答

?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

变量的内容都存储在栈中。
基本类型int,double等都存储在值栈中。
而应用类型确实保留的一个引用地址。
为什么说是应用地址,而不是直接持有呢?
如果是直接持有,表示自己的这一块内存拥有着一个对象,如果我要一个一模一样的对象怎么办?
如:
Object oo = new Object();
Object c = oo;
如果做成直接持有,表示这里就有两个对象了。
引用又是什么意思呢?
Java中引用对象的内容都放在堆中。
栈(堆模块的起始内存地址)-堆(对象的内容)
那么Object oo = new Object();
表示着:一个栈引用了一个新堆。
则:Object c = oo;
表示 我在创建一个新栈的位置,引用原来的这个堆。

查看完整回答
反对 回复 2019-03-09
?
慕神8447489

TA贡献1780条经验 获得超1个赞

new Dog();作用是创建一个Dog类的对象。我觉得可以理解为在内存空间中复制出一份Doc来。
而Dog d则是指创建一个可以指向Dog类型的引用。
而“=”,则说明d是指向之前new Dog()创建的对象。
Dog d = new Dog();
是说复制一份Dog类到新开辟的内存空间,空间地址譬如说是#01
然后创建一个Dog类的引用d,d所对应的值是之前开辟空间的地址#01
之后调用方法什么的,就是指通过引用来调用#01里的方法。

查看完整回答
反对 回复 2019-03-09
  • 2 回答
  • 0 关注
  • 737 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信