Java 中的类型转换实际上是如何工作的?

How Does Type Casting in Java Actually Work?

假设 AB 的超类,每个父类都有 属性 i,默认值为 0.

B b = new B();
System.out.print(b.i);
A a = b;
a.i = 3;
System.out.print(b.i);

为什么输出是 00 而不是 03

转换是否创建新对象?

编辑:

这是 A 和 B:

class A {
    int i;
}
class B extends A {
    int i;
}

没有看到 AB 有点难以推测,但听起来您在 B 中有第二个字段 i阴影 A 中的字段 i。这是一个完整的独立示例,

static class A {
    public int i = 0;
}

static class B extends A {
    public B() {
        this.i = 2;
    }
}

public static void main(String[] args) {
    B b = new B();
    System.out.println(b.i);
    A a = b;
    a.i = 3;
    System.out.println(b.i);
}

然后输出

2
3

清楚地证明转换确实不会创建新对象。