为什么这个Java程序与我的期望背道而驰?

为什么这个Java程序与我的期望背道而驰?,java,Java,为什么这个计划与我的期望背道而驰 我预计:150 47 50 我得到:0 50 0 50 class Poppet { int i; Poppet(int i) { i = i; } } class Ideone { private final int i = 50; // Initialized final private final int j; // Blank final private final Poppet p; /

为什么这个计划与我的期望背道而驰

我预计:150 47 50 我得到:0 50 0 50

class Poppet {
    int i;
    Poppet(int i) {
        i = i;
    }
}

class Ideone
{
    private final int i = 50; // Initialized final
    private final int j; // Blank final
    private final Poppet p; // Blank final reference
    // Blank finals MUST be initialized in the constructor:
    public Ideone() {
        j = 1; // Initialize blank final
        p = new Poppet(1); // Initialize blank final reference
        System.out.println(p.i);
    }
    public Ideone(int x) {
        j = x; // Initialize blank final
        p = new Poppet(x); // Initialize blank final reference
        System.out.println(p.i);
    }

    public static void main (String[] args)
    {
        Ideone t = new Ideone();
        System.out.println(t.i);
        Ideone r = new Ideone(47);
        System.out.println(r.i);
    }
}
你能解释一下原因吗?

改变:

Poppet(int i) {
   i = i;
}
致:


通过执行i=i,您正在将方法参数分配给自身,而您真正想要做的是将其分配给类成员变量。

局部变量阴影,如中所述

如果要设置实例变量i,则必须将其前缀设置为this.i


不要只是发布代码的链接。请在此处发布您的代码。谢谢您的建议。我试过了,但是stackoverflow的字处理器写了一个错误,报告代码太多了。我怎么能避免呢?如果Poppet中的int I也是一个空的final,编译器就会发现这个错误-非常感谢你的帮助@用户3380686,非常欢迎您,您肯定不是第一个犯此错误的人
Poppet(int i) {
    this.i = i;
}
class Poppet {
    int i;
    Poppet(int i) {
       this.i = i;
    }
}