黑马程序员技术交流社区

标题: 疑惑:关于对象赋值 [打印本页]

作者: _Water    时间: 2014-4-9 17:42
标题: 疑惑:关于对象赋值
本帖最后由 _Water 于 2014-4-10 15:06 编辑

有两个类:B extends A,疑问是当程序执行到 b=a;时是如何赋值的呢?是先a.Add("1")赋值给b,还是先将a.Add("2")赋值给b呢?或者是其他方式?
  1. class A
  2. {}
  3. class B extends A
  4. {}
  5. class Test
  6. {
  7.     public static void main(String [] args)
  8.         {
  9.                 A a =new A();
  10.                 a.Add("1");
  11.                 a.Add("2");
  12.                 A b =new B();

  13.                 b=a;//赋值时是一个怎么样的过程呢?
  14.         }
  15. }
复制代码

作者: Crystal静新    时间: 2014-4-9 18:49
你可以画下内存图就知道了, b的引用指向的对象变了。

作者: Peach2014    时间: 2014-4-9 22:39
教你一个很简单的方法验证一下!你new出了A的对象后就打印一下,每一次改变都打印一下!你会发现其实就内存地址的改变!
作者: jingdou56    时间: 2014-4-10 14:08
1、  new A 的时候,栈内存中有了一个 a变量 ,
      堆内存为对象 new A开辟了空间 ,然后将 new A的地址值赋给 a

2、  你将new A对象中的数据改变,

3、 当你 new B 的时候, 原理和 new A一样 , b中存储的是 new B的地址值

4、 b = a 时,将 a的地址赋给了b ,这是两个变量对应的是同一个对象,
      随便操作其中一个,领一个会随着改变!





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2