当前位置: 首页 > 面试题库 >

为什么hashCode()和getClass()本机方法?

孟茂学
2023-03-14
问题内容

我检查了Object类的源代码,发现其中的方法声明getClass()

public final native Class<?> getClass();

并且的声明hashCode()

public native int hashCode();

为什么这两个方法native是类中的方法,如何获得这些方法的源代码?


问题答案:

您可以在此处找到本机方法的完整源代码。

希望这对您有用。

这些是本机方法,因为它必须与机器进行交互。这里机器相关的代码被写入在C语言中,这是不与源包或在未来rt.jar的的lib所述的位置Java运行时环境(JRE)。

成为本地用户的另一个原因可能是出于性能方面的考虑。由于C级编程性能可能会提高,因此他们可能已经用C语言编写了本机代码。

这些方法是本地的,因为它们涉及本地数据。该hashCode方法返回一个整数值,该值取决于指向堆上对象的指针的内部表示。该getClass方法必须访问表示已编译程序的类层次结构的内部vtbl(虚函数表)。核心Java都无法做到这些。



 类似资料:
  • 问题内容: 我有一些调用的代码。 不过,这将返回null。 当我从命令行而不是从Eclipse启动相同的代码时,它将返回一个类加载器。 我可以破解代码来做到这一点… 两者都被编译并使用相同的JVM运行。(我确定99.99%)。 任何人都知道为什么第一个会为类加载器返回null? 编辑: 我的问题是:“没有人知道为什么同一类通过Eclipse启动时会返回null,而从命令行加载时会返回类加载器。”

  • 让这种方法本土化背后的逻辑是什么? 与仅使用哈希图制作内嵌字符串池相比,有什么优势? 它看起来有点奇怪,但在非本机代码中似乎很容易做到: 那么为什么是本机代码呢?

  • 问题内容: 在静态上下文中,为什么不能调用的静态版本(而不是必须使用)? 编译器不够聪明,无法确定何时使用对象方法+何时使用静态方法吗? 注意: 我并不是说应该使用a 而不 是非静态方法(这很明显- 如果是的子类,则a的of 可能返回或其他,必须在运行时确定)。 我是说我想知道为什么没有 两个 版本,一个是仅适用于静态上下文的静态方法,另一个是常规的非静态方法。如果不可能,那就不可能了,那就是答案

  • 问题内容: 在java中为什么需要覆盖equals和hashcode方法?什么时候用到? 问题答案: 让我们尝试通过一个示例来理解它,如果我们不进行覆盖而覆盖并尝试使用。 假设我们有一个类像这样那样的两个对象是相等的,如果他们等于(和生成) 仅覆盖 如果仅覆盖被覆盖,则在你第一次调用时将散列到某个存储桶,而在调用时将散列到其他存储桶(因为它们具有不同的)。因此,尽管它们是相等的,但由于它们没有散列

  • 为什么我需要重写Hash Mapp中的值直接访问。也就是说,如果按照下面的hashmap将数据插入到hashmap中,我可以通过将键作为整数来获得值,将对象作为值来获得值。在这种情况下,是否需要重写equals()和hashCode()方法?请给出建议。

  • 本文向大家介绍hashCode 与 equals ?为什么重写equals时必须重写hashCode方法?相关面试题,主要包含被问及hashCode 与 equals ?为什么重写equals时必须重写hashCode方法?时的应答技巧和注意事项,需要的朋友参考一下 面试官可能会问你:“你重写过 hashcode 和 equals 么,为什么重写equals时必须重写hashCode方法?” ha