2 mu bu shi ding mu_bu_shi_ding 于 2017.01.06 21:58 提问

Java :创建对象时 每一个new出来的对象给给对象变量赋值时 都是一个新地址吗?(如图)

图片说明

6个回答

Readiay
Readiay   2017.01.07 10:39
已采纳

每一个new出来的对象给给对象变量赋值时 都是一个新地址吗?
我肯定回答你:是的,每次都是一个新地址。

在这里有点需要注意,对象是不是一样有两种比较方式,一种就是是不是同一个,一种就是是不是值相等。

是不是同一个,就是==号比较,例如:你有100块,我有100块,比较的两个对象是同一个物体 你用==比较就是false
== 比较的是内存中的地址是不是相同的,也就是你问的a与b的地址是不是相同,很显然不同,因为他们不是同一个。

另外一种就是是不是值相同,例如你的键盘ikbc104c这个型号的,你同事也有一个ikbc104c型号的,
这两个是相同的,比较的值是不是相同的。就像你有100块,我有100块,我们的钱是一样多的。
这个使用equalse比较的,如果不覆盖,就是调用Object的equalse方法,比较内存是不是同一个地址。

sun1021873926
sun1021873926   Ds   Rxr 2017.01.06 22:04

是,每次的地址一般情况下都不相同。

u010528826
u010528826   2017.01.06 22:05

每个对象在被实例化时,都会在堆中分配新的地址。如上面代码,你可以把两次实例化后的内存地址打印出来,可以很明确的看出是两个不同的地址。

oyljerry
oyljerry   Ds   Rxr 2017.01.06 22:25

一般情况是每次都会在堆上创建新对象,所以a,b指向的地址不同。
一些情况为了性能,会有对象池,通过工厂模式等来实现

http://www.cnblogs.com/aurawing/articles/1887029.html

abl0430
abl0430   2017.01.07 02:27

你那两个Y不在同一个类中,分配的空间不在地址不一样的 Y被new出来后 你可以实用里面的方法

arsaycode
arsaycode   2017.04.19 15:11

肯定不是同一个,你也可以直接打印出来,或者 用“==”比较一下

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!