首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

InterfaceA是接口,new InterfaceA2正确吗?

如上代码,InterfaceA是接口类型的。那么new InterfaceA[2]正确吗?

|

|

|

|

|

|

|

|

|

|

答案:正确。

本题的考点是:对象数组。对象数组实际存放的不是对象本身,而是对象引用的地址。

先看以下代码。

obj的运行结果是:java.lang.Object@61bbe9ba,也就是new Object()对象在堆内存中的地址(以toString()形式体现而已)。

如果严格从语法来讲,java中“万物皆对象”是没有任何问题的。但一般而言,我们所说的“对象”指的是堆内存中的对象;栈内存中的对象有一个更合适的叫法——“引用”,引用存放的就是堆内存中对象的地址。例如,以上代码中new Object()是在堆内存中开辟一块空间并存放属性等各种数据,而栈内存中的obj存放的是刚才new Object()在堆内存中的地址(即地址是java.lang.Object@61bbe9ba),如图所示。

重要的事情多说几遍:

引用存放的就是堆内存中对象的地址

引用存放的就是堆内存中对象的地址

引用存放的就是堆内存中对象的地址

再看一下对象数组。顾名思义,对象数组是一个数组,并且数组元素是对象类型的。回到本节一开始提到的:对象数组实际存放的不是对象本身,而是对象的引用地址。因此,在newInterfaceA[2]这个对象数组中,存放的就是InterfaceA对象的引用地址,引用指向谁呢?指向堆地址,但本题没有new Interface(),因此不存在堆地址,所以引用地址是空,即null。因此newInterfaceA[2]实际存放的就是。

最后来验证一下。

运行结果:

null

null

本验证程序也可以这么理解:

inters中存放的是两个InterfaceA类型的对象堆地址,但目前在堆内存中还不存在InterfaceA类型的对象,因此inters的元素值都是null。

如果还理解不了,不妨换个角度想想:接口不能new,但本题new的是数组,根本没有对接口进行new操作。而数组的元素值是引用,引用存放的是对象堆地址,本题没有new对象就不存在堆地址,因此堆地址是null。综上,堆地址是null,说明引用值是null,进而也就说明了数组元素是null。

- 完-

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191205A0O8M400?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券