方法编号1:
public void setAge(int newAge){
age = newAge;
}
方法编号2
public void setAge (int age){
this.age = age;
}
答案 0 :(得分:5)
在两者中,必须假设对象具有名为age
的字段。
在第二个中,还有一个名为age
的参数。由于参数age
与字段age
具有相同的名称,因此“隐藏”字段。因此,在第二个版本中,您看到age
的任何地方都将引用参数,而不是字段。
由于该字段已隐藏,您需要一种方法来访问它。您仍然可以使用this
参考来获取它。 this
引用“this”对象,this.age
访问字段而不是参数。因此,字段this.age
设置为参数age
。
第一个版本只是通过使用不同的参数名称来避免这种歧义,因此字段未隐藏,因此它仍然将字段age
设置为参数,但不需要this.
前缀。
答案 1 :(得分:1)
两者都是setter方法,这是将值赋给类内私有变量的常用约定,两种方法都具有相同的功能,第一种方法是为名为age的类字段赋值,而第二种方法也分配一个值为同一个变量,但该变量由age参数着色,因为它们的名称相同,因此要更改字段age
而不是仅在函数内部可用的本地参数{{1这意味着你想要改变字段而不是局部变量。
答案 2 :(得分:0)
在第一种情况下,很明显两个变量都不同,所以没问题。
但是在第二种情况age
你明确指出了你所指的age
,这是一个好习惯。我们添加this.age
,以便编译器知道您在左侧和右侧局部变量 {中指的是类变量而不是局部变量 {1}}
答案 3 :(得分:0)
考虑setAge
函数是具有成员变量age
的类的成员函数:两个代码都将age
的值更改为传递给函数的参数。 / p>
话虽如此,第二种方法被认为是一种很好的做法,您明确指定要使用this
关键字更改当前对象的成员变量。
答案 4 :(得分:0)
我认为年龄是你使用的班级的一员。在这种情况下,在第二种方法中,参数与成员类具有相同的名称,因此您需要在方法中使用this
说明符来指定您要为类成员分配新值。
答案 5 :(得分:0)
两种方法都相同,会做同样的事情,但标准是使用
public void setAge (int age){
this.age = age;
}
with" this.age" (这意味着您的对象的年龄)并且具有与该字段相同的参数名称。