为什么这个Java程序与我的期望背道而驰?
为什么这个计划与我的期望背道而驰 我预计:150 47 50 我得到:0 50 0 50为什么这个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; /
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;
}
}