![](/img/trans.png)
[英]Why does super.hashCode give different results on objects from the same Class?
[英]why this.hashCode() and super.hashCode() returns the same value in subclass?
class A {
}
class B extends A {
void m1(){
System.out.println(this.hashCode()); // Line 1
System.out.println(super.hashCode()); // Line 2
System.out.println(new A().hashCode()); // Line 3
}
}
class Test {
public static void main(String[] args) {
B bobj=new B();
bobj.m1();
}
}
我在这里有点困惑,因为我在第1行和第2行获得了相同的hashCode值,而第3行则给出了不同的hashCode。
您的两个类都不重写hashCode()
,因此与this
和super
都调用完全相同的方法。
第三行给出了不同的哈希码,因为它是在不同的对象上调用的,但是所调用的方法还是与前两行相同。
您正在从Object类中调用默认的hashCode()
方法,因为已对其进行了覆盖。 因此,没关系,您从子类或超类调用,它在内部调用Object的类hashCode()
方法。
第三者不同的原因,这是新对象的要求。 而且它具有不同的虚拟内存地址,并且Object类的hashCode()
方法将其返回 。
this
是指当前类对象,而super
是指直接父类对象,因此两者是不同的。
没有单独的“父对象”。 它是类B的一个对象。因为类B扩展了类A,所以B的任何实例也是A的有效实例,但它仍然只是一个对象。
例:
class A {
Object getA() { return this; }
}
class B extends A {
Object getB() { return this; }
}
class Test {
public static void main(String[] args) {
B obj = new B();
if (obj.getA() == obj.getB()) {
System.out.println("Same object");
} else {
System.out.println("Different objects");
}
}
}
输出: Same object
,显示出this
对象所看到A的方法和通过B的方法所看到的是一样的。
因此,hashCode也是如此。
仅当重写方法时,使用super
才区分调用哪个方法实现。 它不能访问其他对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.