簡體   English   中英

這兩種方法有什么區別?

[英]What is the difference between those 2 methods?

方法1:

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

方法2

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

在這兩種情況下,都必須假定對象具有一個稱為age的字段。

第二版

在第二個中,還有一個名為age的參數。 由於參數age具有相同的名稱作為字段age ,它“ 隱藏 ”的領域。 因此,在第二個版本中,您看到age任何地方都將引用該參數,而不是該字段。

由於該字段是隱藏的,因此您需要一種仍然可以訪問它的方法。 您仍然可以通過使用this參考資料來了解它。 this是指“ this”對象, this.age訪問字段而不是參數。 因此,將this.age字段設置為參數age

第一版

第一個版本只是通過使用不同的參數名稱來避免這種歧義,從而不會隱藏字段 ,因此它仍將字段age設置為該參數,但不需要this. 前綴

兩者都是setter方法,這是將值分配給類內的私有變量的通用約定,這兩種方法具有相同的功能,第一種方法是將值分配給稱為age的類字段,而第二種方法也將值分配給相同的變量,但該變量是由年齡參數陰影,因為他們的名字是一樣的,所以要改變字段age而不是僅僅在函數內部可用的本地參數,你需要使用this.age這意味着你要改變字段而不是局部變量。

在第一種情況下,很明顯兩個變量都不同,所以沒有問題。

但在這第二種情況下age你是明確指定其age你指的是,這是一個很好的做法。 我們添加this.age以便編譯器知道您在左側和右側局部變量 age中引用的是類變量而不是局部變量

考慮到setAge函數是具有成員變量age的類的成員函數:兩種代碼都會將age的值更改為傳遞給該函數的參數。

話雖這么說,第二種方法被認為是一種好習慣,您可以通過使用this關鍵字來明確指定要更改當前對象的成員變量。

我認為年齡是您使用的課​​程的成員。 在這種情況下,在第二種方法中,參數的名稱與成員類的名稱相同,因此您需要在方法內使用this說明符來指定要為類成員分配新值。

兩種方法相同,會做相同的事情,但標准是使用

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

帶有“ this.age”(這表示對象的年齡),並且具有與字段相同的參數名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM