Java 为什么这个程序没有给出歧义错误

Java 为什么这个程序没有给出歧义错误,java,this,Java,This,我有一个java程序,其中使用了参数化构造函数,参数名与实例变量的参数名相同。 在这种情况下,我们需要使用这个关键字。但是当我不使用这个关键字时,它不会给出任何错误,而是用默认值初始化实例变量 class Demo{ int a; Demo(int a) { a = a; } public static void main(String args[]) { Demo d = new Demo(5); } }

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

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

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

但当执行该程序时,a的值变为0。怎么做?

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

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

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


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


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

但您想要实现的是将一个方法变量的值赋给这个实例变量。所以您需要使用这个关键字来引用实例变量

Demo(int a) {
    this.a = a;
}
如果不想使用此关键字,则需要重命名方法变量,如

Demo(int b) {
    a = b; // a will refer to instance variable in this case.
}
我的问题是a的值如何变为零

参考:


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

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

但您想要实现的是将一个方法变量的值赋给这个实例变量。所以您需要使用这个关键字来引用实例变量

Demo(int a) {
    this.a = a;
}
如果不想使用此关键字,则需要重命名方法变量,如

Demo(int b) {
    a = b; // a will refer to instance variable in this case.
}
我的问题是a的值如何变为零

参考:


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

Java将初始化类成员为已知的默认值,在这种情况下,int默认为0,因为您从未实际更改过它,所以该值保持不变,0实际上,并启用了相应的警告,您可能会看到这样一个例子,它告诉您参数赋值是一件坏事。Java会将类成员初始化为已知的默认值,在这种情况下,int默认为0,因为您从未实际更改过它,所以该值保持不变0实际上,启用了适当的警告,你可能会看到一个告诉你参数赋值是件坏事。我知道我们需要使用这个关键字。但我的问题是a的值如何变成零。我知道我们需要使用这个关键字。但我的问题是a的值如何变成零。