为什么打印为零?

时间:2018-04-22 09:38:24

标签: java

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? 我在维基百科网站上找到了这个例子

更新: 我的问题非常糟糕,我完全错过了这一点...... 他们说指针超出范围,对象不会完全创建 我想问一下,更有经验的人是否可以向我解释这一点,因为我是编程世界的新手

2 个答案:

答案 0 :(得分:1)

在IDE中,在getTheValue()方法中设置断点,然后观察堆栈。在完成作业之前,您正在调用constructor->doSomething->getTheValue。在那时它仍然是0,保证是它在构造阶段分配并且之后没有修改,这仍然是正确的。

答案 1 :(得分:0)

像这样修改你的代码来解决问题:

public A( B b ) {
    super();
    finalValue = 23;
    b.doSomething( this ); // this escapes!
}