Java 中的类型转换实际上是如何工作的?
How Does Type Casting in Java Actually Work?
假设 A
是 B
的超类,每个父类都有 属性 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;
}
没有看到 A
或 B
有点难以推测,但听起来您在 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
清楚地证明转换确实不会创建新对象。
假设 A
是 B
的超类,每个父类都有 属性 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;
}
没有看到 A
或 B
有点难以推测,但听起来您在 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
清楚地证明转换确实不会创建新对象。