【问题标题】:Activity Object.hashCode() is the same on different instancesActivity Object.hashCode() 在不同的实例上是相同的
【发布时间】:2021-11-21 15:55:09
【问题描述】:

完全不同实例的可预测相同Object.hashCode()

如果我理解正确,那么对象的每个新实例的Object.hashCode() 应该是新的,并且几乎总是与以前的不同,但碰撞除外。 但我发现了一个有趣的模式。 如果我使用 Android Studio,创建一个 Activity 并在 onCreateonStartonResumeonPauseonStoponRestartonDestroy 方法中调用哈希码并在模拟器中运行应用程序,然后我在以下条件下的日志中得到相同的哈希码:

  • Android Studio 中的每次 Activity 运行,即使我关闭模拟器和 Studio 并重新进入,即使我重新启动计算机 (Windows 10),但如果我冷启动模拟器,哈希码也会发生变化。李>
  • 当然,在模拟器本身中,当 Activity 经历onStartonResumeonPauseonStoponRestart 循环时,哈希码不会改变。
  • 如果我使用“后退”按钮关闭应用程序并在模拟器中再次运行它,哈希码会发生变化。
  • 如果我通过从最近的应用程序屏幕中将应用程序滑出并重新启动它来终止应用程序 - 哈希码将与首次启动时相同。

【问题讨论】:

    标签: android android-activity hashcode


    【解决方案1】:

    hashcode 方法的唯一要求是,如果两个对象相等,那么它们必须具有相同的 hashcode。不保证两个不同的对象应该有不同的哈希码。如果一个类没有覆盖 hashcode 方法,那么行为是依赖于实现的。一个典型的行为是返回内部对象引用。如果活动是第一个在您的模拟器中运行的活动,那么如果它总是获得相同的对象引用(这可能是一个简单的计数器),这并不奇怪。当然,如果您在同一个模拟器会话中关闭并重新运行应用程序,您将获得一个新的对象引用和一个新的哈希值。刷卡会杀死 vm 进程,因此会启动一个新的 vm 并重置对象引用计数器。

    https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#hashCode()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 2019-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-02
      • 1970-01-01
      相关资源
      最近更新 更多