A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© _Water 中级黑马   /  2014-4-9 17:42  /  779 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 _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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 神马都是浮云

查看全部评分

3 个回复

倒序浏览
你可以画下内存图就知道了, b的引用指向的对象变了。
回复 使用道具 举报
教你一个很简单的方法验证一下!你new出了A的对象后就打印一下,每一次改变都打印一下!你会发现其实就内存地址的改变!
回复 使用道具 举报
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 ,这是两个变量对应的是同一个对象,
      随便操作其中一个,领一个会随着改变!

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马