class A {
final int finalValue;
public A( B b ) {
super();
b.doSomething( this ); // this escapes!
finalValue = 23;
}
int getTheValue() {
return finalValue;
}
}
class B {
void doSomething( A a ) {
System.out.println( a.getTheValue() );
}
}
为什么打印为零?而不是23? 我在维基百科网站上找到了这个例子
更新: 我的问题非常糟糕,我完全错过了这一点...... 他们说指针超出范围,对象不会完全创建 我想问一下,更有经验的人是否可以向我解释这一点,因为我是编程世界的新手
答案 0 :(得分:1)
在IDE中,在getTheValue()
方法中设置断点,然后观察堆栈。在完成作业之前,您正在调用constructor->doSomething->getTheValue
。在那时它仍然是0,保证是它在构造阶段分配并且之后没有修改,这仍然是正确的。
答案 1 :(得分:0)
像这样修改你的代码来解决问题:
public A( B b ) {
super();
finalValue = 23;
b.doSomething( this ); // this escapes!
}