方法参数,实例变量

时间:2015-04-21 13:58:55

标签: java variables methods instance

在下面的代码中我有this.name= name,当我打印出来时,我得到了学生的名字。 但是,当我更改name= this.name的代码时,我在打印输出中收到null,为什么会这样? 或者当我进一步更改name = name时。

public Student(String name, String groupName, int javaProf, String cprNumber, Gender gender) {
        this.name=name; 

        //"name" refers to method parameter and "this.name" refers to the instance variable. Instance field
        //takes precedence over method parameter and avoids name clash

        this.groupName = groupName;
        this.javaProf = javaProf;
        this.cprNumber = cprNumber;
        this.gender = gender;
        this.courses = new HashMap<>();
    }
}

3 个答案:

答案 0 :(得分:2)

评论说明了一切:name引用方法参数,而this.name引用实例变量。

如果你写

name = this.name;

将实例变量的值(最初为null)赋值给method参数的值)。因此,实例变量保持null

如果你写

name = name;

将method参数的值赋给method参数的值。这基本上是一个无操作。同样,实例变量的值保持null

答案 1 :(得分:1)

嗯,这很容易理解,你的方法将“name”作为参数,你的类有一个名称与“name”完全相同的变量,在java中我们使用保留字“this”来引用变量类。在这种情况下,this.name引用Student类中的变量“name”,而“name”引用构造函数方法的参数。

然后name = this.name返回null值只是因为this.name尚未初始化

答案 2 :(得分:0)

this.name = name - &gt;全局变量(可能为空)=方法变量(可能是数据)。

name(它有数据)= this.name(可能是null),使两个变量都为null。