这两种方法有什么区别?

时间:2017-07-21 18:19:01

标签: java methods this setter

方法编号1:

public void setAge(int newAge){
    age = newAge;
}

方法编号2

public void setAge (int age){
    this.age = age;
}

6 个答案:

答案 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" (这意味着您的对象的年龄)并且具有与该字段相同的参数名称。