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

标签 java object methods types return

我目前正在大学学习 Java 类(class)。这是我的第一堂编程课,我偶然发现了一些我无法理解的东西。据我所知,有两种比较变量的方法。第一个是使用 == , != , < , > , =< , >=原始变量的符号,例如 int、double 等。第二种方法是对引用类型使用 .equals() 方法。现在这是我的问题:

当我使用 .getClass()方法,我可以用 .equals() 方法和 == 比较两个类/!=方法。因为我可以使用 ==/!=迹象,我想 .getClass()返回对象类的方法必须返回原始类型。但是在谷歌上搜索我在 java API 中发现的关于这个方法的唯一一件事就是它返回一个对象的类。它没有告诉我它返回的变量类型。这种方法究竟是如何工作的。它返回什么?我试图问我的老师,但她不知道。谢谢!

最佳答案

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

所以如果我有两个字符串:

String x = "Hello";
String y = x;

xy第二行执行后共享相同的内存地址,x == y计算结果为真。

getClass() 也是如此方法。 getClass()方法返回对象的类作为 Class<T>目的。问题是,为什么这个计算结果为真:

x.getClass() == y.getClass()

答案很简单。因为xy都是 String 类型.所以打电话getClass将返回相同的实例。这意味着两个返回的对象共享相同的内存地址。

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

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

你只需要知道getClass返回的对象在相同的内存地址,如果它们代表的类是相同的。

关于java - 有人可以向我解释 java 中的 .getClass() 方法吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36233435/

相关文章:

java - 覆盖后退按钮以充当主页按钮

java - 从 Eclipse 中将带有 JavaFX WebView 组件的 SWT 作为 Runnable JAR 导出导致 NullPointerException

javascript - 如何通过每个属性并测试值?

powershell - Invoke-CimMethod 的无效(静态)方法

java - 如何在多屏工作流中使用 Activity 或 Fragment?

java - 如何在 avro 模式中创建包含字符串数组的对象?

java - hashCode() 的困境 - Java

javascript - 如何从 Javascript 中的二维数组创建对象数组?

sql - 如何从一个 cfc 文件中的函数查询中调用另一个 CFC 文件中的函数?

pointers - 非指针类型的指针方法