Joh*_*ohn 3 java methods types return object
我目前正在大学上Java课。这是我的第一门编程课,我偶然发现了一些我无法理解的东西。据我了解,比较变量有两种方法。首先是使用==,!=,<,>,=<,>= 为原始变量,如int,双,等迹象。第二种方法是将.equals()方法用于引用类型。现在这是我的问题:
使用该.getClass()方法时,可以将两个类与.equals()方法和==/ !=方法进行比较。由于可以使用==/ !=符号,因此我假设.getClass()返回对象类的方法必须返回原始类型。但是在Google上搜索时,我在Java API中发现的关于此方法的唯一一件事就是它返回了对象的类。它没有告诉我它返回的变量类型。此方法的工作原理。它返回什么?我试图问我的老师,但她不知道。谢谢!
首先,您需要知道如何==和!=比较两个操作数。为什么原因==而!=不能用来比较引用类型是,他们实际上比较的内存地址两个引用类型变量。
因此,如果我有两个字符串:
String x = "Hello";
String y = x;
Run Code Online (Sandbox Code Playgroud)
由于x和y在第二行执行后共享相同的内存地址,因此x == y求值为true。
该getClass()方法也是如此。该getClass()方法将对象的类作为Class<T>对象返回。问题是,为什么此评估为true:
x.getClass() == y.getClass()
Run Code Online (Sandbox Code Playgroud)
答案很简单。因为x和y都是type String。因此,调用getClass将返回相同的实例。这意味着两个返回的对象共享相同的内存地址。
“但是当我用==运算符比较具有相同字符的字符串时,它的计算结果为false!” 你大喊。
这是因为字符串位于不同的内存地址。但是,getClass如果它们表示的类相同,则将返回的类始终位于相同的内存地址。这是由于ClassLoader工作方式。但是我不是那个专家。
如果它们代表的类相同,则只需要知道getClass返回的对象位于相同的内存地址即可。