Activity Object.hashCode() 在不同的实例上是一样的
Activity Object.hashCode() is the same on different instances
完全不同实例的可预测相同 Object.hashCode()
如果我理解正确,那么对象的每个新实例的 Object.hashCode()
应该是新的并且几乎总是与以前的不同,除了碰撞。
但我发现了一个有趣的模式。
如果我使用 Android Studio,创建一个 Activity 并在 onCreate
、onStart
、onResume
、onPause
、[=18 中调用哈希码=]、onRestart
、onDestroy
方法和 运行 模拟器中的应用程序,然后在以下条件下我在日志中得到相同的哈希码:
- 在Android Studio中Activity的每个运行,即使我关闭模拟器和Studio并返回,即使我重新启动计算机(Windows 10),但是如果我冷启动模拟器,哈希码就会改变。
- 当然,在模拟器本身中,当 Activity 经过
onStart
、onResume
、onPause
、[=18= 时,哈希码不会改变], onRestart
循环.
- 如果我使用后退按钮关闭应用程序并在模拟器中再次 运行 它,哈希码会改变。
- 如果我通过从最近使用的应用程序屏幕中将应用程序滑出并再次启动它来终止应用程序 - 哈希码将与首次启动时相同。
哈希码方法的唯一要求是,如果两个对象相等,则它们必须具有相同的哈希码。不保证两个不同的对象应该具有不同的哈希码。如果 class 没有覆盖 hashcode 方法,那么行为是依赖于实现的。一个典型的行为是 return 内部对象引用。如果 activity 是第一个到 运行 在你的模拟器中,那么如果它总是得到相同的对象引用(这可能是一个简单的计数器)就不是那么奇怪了。当然,如果您在同一个模拟器会话中关闭并重新 运行 应用程序,您将获得一个新的对象引用和一个新的哈希值。滑动会终止 vm 进程,因此会启动一个新的 vm 并重置对象引用计数器。
https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#hashCode()
完全不同实例的可预测相同 Object.hashCode()
如果我理解正确,那么对象的每个新实例的 Object.hashCode()
应该是新的并且几乎总是与以前的不同,除了碰撞。
但我发现了一个有趣的模式。
如果我使用 Android Studio,创建一个 Activity 并在 onCreate
、onStart
、onResume
、onPause
、[=18 中调用哈希码=]、onRestart
、onDestroy
方法和 运行 模拟器中的应用程序,然后在以下条件下我在日志中得到相同的哈希码:
- 在Android Studio中Activity的每个运行,即使我关闭模拟器和Studio并返回,即使我重新启动计算机(Windows 10),但是如果我冷启动模拟器,哈希码就会改变。
- 当然,在模拟器本身中,当 Activity 经过
onStart
、onResume
、onPause
、[=18= 时,哈希码不会改变],onRestart
循环. - 如果我使用后退按钮关闭应用程序并在模拟器中再次 运行 它,哈希码会改变。
- 如果我通过从最近使用的应用程序屏幕中将应用程序滑出并再次启动它来终止应用程序 - 哈希码将与首次启动时相同。
哈希码方法的唯一要求是,如果两个对象相等,则它们必须具有相同的哈希码。不保证两个不同的对象应该具有不同的哈希码。如果 class 没有覆盖 hashcode 方法,那么行为是依赖于实现的。一个典型的行为是 return 内部对象引用。如果 activity 是第一个到 运行 在你的模拟器中,那么如果它总是得到相同的对象引用(这可能是一个简单的计数器)就不是那么奇怪了。当然,如果您在同一个模拟器会话中关闭并重新 运行 应用程序,您将获得一个新的对象引用和一个新的哈希值。滑动会终止 vm 进程,因此会启动一个新的 vm 并重置对象引用计数器。
https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#hashCode()