为什么我不能传递参考地址而不是包裹/串行对象?

时间:2015-05-07 21:44:17

标签: java android

根据StackOverflow和互联网,传递对象的方式是序列化或包裹(或使用“静态” - 不赞成)。

我想知道为什么我不能传递地址

     MainActivity.toString();  // MainActivity@b0ff5f80

然后在新的类/ Activity中,只需更改新创建的对象的地址?

MainActivity originalMainActivity = new MainActity();
originalMainActivity = getIntent.getStringExtra("originalMainActivity");
//yes I realize the above line is incompatible....Obj != String 

如果对象已经创建并且正在堆中(我想??) 为什么我们不能重新分配地址?如果我们能够有人请提供一个例子吗?谢谢。

P.S。 (毕竟当我们在构造函数中传递一个类对象时,我们实际上并没有传递引用地址)Thx。

2 个答案:

答案 0 :(得分:3)

您似乎在考虑地址,就像您在C或C ++中一样。

然而:

  1. 您完全误解了toString的目的:在一般情况下,toString的唯一有效用途是打印对象的表示,以进行调试。没有什么可说的,以后可以使用该字符串来重新生成或再次找到该对象。

  2. Java语言没有提供任何访问内存地址的方法,部分原因是垃圾收集器通常可以自由重新安排内存。解决这个问题的唯一方法是固定对象并在Java语言之外操作。

  3. 此外,你应该明白,当你从Parcel中获取一个对象时,你不一定是在同一个进程中(即使它是你的进程,你的进程可能在重新启动之前被后台杀死) ) - 所以你的方法只能在一组有限的情况下工作。

答案 1 :(得分:0)

  

然后在新类\ Activity中只更改新创建的对象的地址?

除其他原因外,因为在Java中这是不可能的。