java - 为什么我不能传递引用地址而不是包裹/串行对象?

标签 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 

如果对象已经被创建并且位于堆中(我认为??) 为什么我们不能重新分配地址?如果可以的话,有人可以提供一个例子吗?谢谢。

附: (毕竟,当我们在构造函数中传递类对象时,我们实际上并没有传递引用地址)再次感谢。

最佳答案

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

但是:

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

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

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

关于java - 为什么我不能传递引用地址而不是包裹/串行对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30112211/

相关文章:

java - Android中如何获取String中的一些字符

Android ConnectivityManager onAvailable 有时不返回

android - 启用 proguard 时不会调用 Serialized 中的 readObject 函数

java - Android 应用程序在 setSupportActionBar 崩溃

java - 部署 Web 应用程序时仅读取 .properties 文件一次

java - 检查调用对象是否是子类的实例

java - csv输出错误

java - 无法在 Samsung A5 (2016) 上使用 Toast

java - 急切初始化单例 vs 惰性初始化单例

java - 第二个 for 循环如何像在第一个 for 循环内一样工作?