JAVA-改写equals方法

请问15行代码中aa.i为什么不能用obj.i代替呢,obj不是已经强制转换成子类引用了吗?

class B {
    public int i;

    public B(int i) {
        this.i = i;
    }

    public boolean equals(Object obj) {
        B aa = (B) obj;

        if (this.i == aa.i) //15行
            return true;
        else
            return false;
    }
}

public class Equals_2 {
    public static void main(String[] args) {
        B aa1 = new B(2);
        B aa2 = new B(2);

        System.out.println(aa1.equals(aa2)); //输出结果为true
    }
}

首先你要明确一个区别:你在idea里编辑代码,起作用的是编译器,而实际运行时起作用的是JVM和解释器。
而编译器是不具备自动识别对象实际类型的能力的,比如Object obj = new Student(),虽然obj实际是Student类型,但编译器不认识,它只认前面变量定义的Object类型。所以需要有显式转换的代码Student student = (Student) obj
说白了,显式转换是给编译器看的,为了让代码编译通过。JVM在运行编译后的文件时是能推断出变量实际类型的。

obj还是原来的Object,不动
强制转换后的对象赋给了新的aa