Java 是否保证 Object.getClass() == Object.getClass()?

2022-09-01 03:03:36

我在这里确实是指身份平等。

例如,以下内容是否始终打印为 true

System.out.println("foo".getClass() == "fum".getClass());

答案 1

是的,类标记是唯一的(对于任何给定的类装入器,就是这样)。

也就是说,您将始终在同一类装入器领域内获得对同一物理对象的引用。但是,不同的类装入器将装入不同的类标记,并且当由两个不同的类装入器装入时,同一类定义被视为不同。

请参阅我之前的答案,以对此进行演示。


答案 2

对于类 的两个实例,X

x1.getClass() == x2.getClass()

仅当

x1.getClass().getClassLoader() == x2.getClass().getClassLoader()

注意:Class.getClassLoader() 可能返回 null,这意味着引导类加载器。