关于实例化

关于实例化

Animal two=new Cat();

把子类Cat的空间地址,引用给Animal 父类,也就是对象two ,我这样理解对吗?   还是2块空间, 但是这2块空间地址是一样的,对吗?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕小脸 2020-12-22 18:41:03

同学你好,

1、栈内存存放基本数据类型,而new出来的对象或者数组都存放在堆中

Animal two=new Cat();

new XXX(); 这个动作是在堆内存开辟一个空间,而这个空间的名称叫做内存地址,然后通过赋值符号=将内存地址放到栈空间里面名为two的空间中.

2、理解是正确的,重写equals方法后,比较的是这两个对象中的属性(内容)是否相等

注:关于堆栈这里同学记住即可

好帮手慕小脸 2020-12-22 16:39:49

同学你好,

1、子类Cat的空间地址,引用给Animal 父类,也就是对象two,我这样理解对吗

理解是正确的

2、还是2块空间, 但是这2块空间地址是一样的,对吗?

是不一样的,上述代码中,Animal two声明是在栈内存中开辟一个空间,new Cat(); 这个动作是在堆内存开辟一个空间,而这个空间的名称叫做内存地址

  • 提问者 rock221 #1

    我怎么记得之前讲实例化 ,

    Animal one=new Animal(); 是开辟了两块空间呢?

    基本类型的= 是赋值

    引用类型的=是引用地址。 我记得是这样啊。 

    ????  

    2020-12-22 16:43:33
  • 提问者 rock221 #2

    声明对象在栈内开辟空间, new Cat()在堆里开辟了空间, 这是2块空间, 栈内存放基本数据类型,堆内存放动态数据,然后通过=符号,(赋值)one指向了堆内那快空间,把信息引用到了栈空间内,对吧?也可以说它是两块空间,是这个意思对吗?  也可以说它是一块空间引用过来了。

    之前讲的是 Animal one=new Animal();

    Animal two=new Animal(); 这是两块不同的空间地址, 但是如果equals方法重写,可以让他们比较参数内的信息是否一致, 如果一致就是ture。而不是比较空间的地址是否一致, 我弄混了和这里的知识点。

    老师我这样理解对吗????

    2020-12-22 16:58:06
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师