Java是否保证getClass()返回的Class对象始终是同一个实例?

Ada*_*ter 5 java equality instance

可能重复:
Java是否保证Object.getClass()== Object.getClass()?

我注意到Eclipse生成以下代码equals:

public class MyClass {

    public boolean equals(Object obj) {
        if (this == obj)
            return true;

        if (obj == null)
            return false;

        if (getClass() != obj.getClass())
            return false;

        MyClass other = (MyClass) obj;

        // ...
    }

}
Run Code Online (Sandbox Code Playgroud)

特别感兴趣的是这段代码:

if (getClass() != obj.getClass())
    return false;
Run Code Online (Sandbox Code Playgroud)

该代码假定Class返回的对象getClass()将是同一类的所有对象的相同实例(不仅仅是等效实例).也就是说,他们认为没有必要像这样写:

if (getClass().equals(obj.getClass()))
    return false;
Run Code Online (Sandbox Code Playgroud)

Java是否正式记录了该getClass()方法的这种行为?

biz*_*lop 11

是的,只要两个类由同一个类加载器加载,类对象就是一样的.

但如果不是,那么这两个类必须被视为不同,即使它们可能共享相同的名称和代码.(这在使用多个类加载器时很容易遇到,因此值得记住.)

  • @Andreas_D不,一般的答案是肯定的.同一个对象将始终返回相同的类实例.两个看起来相似的对象可能会返回不同的类实例,但那是因为这两个类实际上是不同的. (2认同)