有人可以向我解释Java中的.getClass()方法

Joh*_*ohn 3 java methods types return object

我目前正在大学上Java课。这是我的第一门编程课,我偶然发现了一些我无法理解的东西。据我了解,比较变量有两种方法。首先是使用==!=<>=<>= 为原始变量,如int,双,等迹象。第二种方法是将.equals()方法用于引用类型。现在这是我的问题:

使用该.getClass()方法时,可以将两个类与.equals()方法和==/ !=方法进行比较。由于可以使用==/ !=符号,因此我假设.getClass()返回对象类的方法必须返回原始类型。但是在Google上搜索时,我在Java API中发现的关于此方法的唯一一件事就是它返回了对象的类。它没有告诉我它返回的变量类型。此方法的工作原理。它返回什么?我试图问我的老师,但她不知道。谢谢!

Swe*_*per 5

首先,您需要知道如何==!=比较两个操作数。为什么原因==!=不能用来比较引用类型是,他们实际上比较的内存地址两个引用类型变量。

因此,如果我有两个字符串:

String x = "Hello";
String y = x;
Run Code Online (Sandbox Code Playgroud)

由于xy在第二行执行后共享相同的内存地址,因此x == y求值为true。

getClass()方法也是如此。该getClass()方法将对象的类作为Class<T>对象返回。问题是,为什么此评估为true:

x.getClass() == y.getClass()
Run Code Online (Sandbox Code Playgroud)

答案很简单。因为xy都是type String。因此,调用getClass将返回相同的实例。这意味着两个返回的对象共享相同的内存地址。

“但是当我用==运算符比较具有相同字符的字符串时,它的计算结果为false!” 你大喊。

这是因为字符串位于不同的内存地址。但是,getClass如果它们表示的类相同,则将返回的类始终位于相同的内存地址。这是由于ClassLoader工作方式。但是我不是那个专家。

如果它们代表的类相同,则只需要知道getClass返回的对象位于相同的内存地址即可。