为什么这个程序不会出现歧义错误

时间:2015-08-14 04:56:04

标签: java this

我有一个java程序,其中使用了一个参数名称与实例变量相同的参数名称的参数化构造函数。 在这种情况下,我们需要使用此关键字。但是,当我不使用此关键字时,它不会给出任何错误,而是使用默认值初始化实例变量。

class Demo{
    int a;
    Demo(int a)
    {
       a = a;
    }

    public static void main(String args[])
    {
        Demo d = new Demo(5);
    }
}

但是当执行该程序时,a的值变为0.如何?

3 个答案:

答案 0 :(得分:7)

没有歧义 - 在a = a;中, a明确地引用参数,因为这是"最里面的"名为a的变量。

答案 1 :(得分:2)

因为将相同的值分配给同一个变量是完全有效的。所以a = a是完全有效的代码。

但是你想要实现的是将a(方法变量)的值赋给this.a(实例变量)。因此,您需要使用this关键字来引用实例变量。

Demo(int a) {
    this.a = a;
}

如果您不想使用this关键字,则需要重命名方法变量,如

Demo(int b) {
    a = b; // a will refer to instance variable in this case.
}
  

我的问题是a的值是如何变为零的。

参考:Primitive Data Types

原始数据类型变量使用默认值初始化。对于int 0 是默认值。

答案 2 :(得分:1)

在代码中覆盖局部变量a,而不是将其值赋给类变量。并且类变量初始化为零。

待办事项

 Demo(int a) {
   this.a = a;
 }
相关问题