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返回的对象位于相同的内存地址即可。
归档时间: |
|
查看次数: |
20513 次 |
最近记录: |