在下面的代码中我有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<>();
}
}
答案 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。