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

Mac*_*zie 39 java identity jvm equality class

我的确意味着身份平等.

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

System.out.println("foo".getClass() == "fum".getClass());
Run Code Online (Sandbox Code Playgroud)

Pét*_*rök 42

是的,类标记是唯一的(对于任何给定的类加载器,即).

即,您将始终在同一个类加载器领域中获得对同一物理对象的引用.然而,不同的类加载器将加载一个不同的类标记,结合以下事实:当由两个不同的类加载器加载的相同类定义被认为是不同的.

请参阅我之前的这个答案,以示范这一点.


McD*_*ell 15

对于两个类的实例X,

x1.getClass() == x2.getClass()
Run Code Online (Sandbox Code Playgroud)

除非

x1.getClass().getClassLoader() == x2.getClass().getClassLoader()
Run Code Online (Sandbox Code Playgroud)

注意:Class.getClassLoader()可能返回null,这意味着引导ClassLoader.


Boz*_*zho 8

是.

返回的Class对象是由所表示的类的静态同步方法锁定的对象.

如果可以返回多个实例,那么

public static synchronized void doSomething() {..}
Run Code Online (Sandbox Code Playgroud)

不会是线程安全的.

  • 另一个线索是javadoc说`getClass`返回"_The_ Class对象,表示该对象的运行时类"......不是"_A_ Class对象......". (4认同)