有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么这个程序不给出歧义错误

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

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

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

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


共 (3) 个答案

  1. # 1 楼答案

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

     Demo(int a) {
       this.a = a;
     }
    
  2. # 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.
    }
    

    my question was how a's value become zero.

    参考:Primitive Data Types

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

  3. # 3 楼答案

    没有歧义-在a = a;中,两个a都明确地引用了参数,因为这是名为a的“最内部”变量