看到成員變量和局部變量同名這個知識點的時候一開始有點懵逼,想了一下其實特別簡單。
先來看一個簡單的代碼。
首先我定義了一個Person類。
public class Person { private int age=1000;//定義成員變量,年齡為1000 public void setAge(int age) { age=age; System.out.println("方法內的年齡"+age); } public void sayHello() { System.out.println("我的年齡是"+age+"."); } }
然後在主函數裡面創建對象並輸出。
Person p=new Person(); p.setAge(20); p.sayHello();
輸出結果是什麼?並不是我們想象的我的年齡是20,而是下面這樣:
//方法內的年齡20 //我的年齡是1000.
想一下其實就很容易理解。
一句話,如果不同名,那麼方法內的變量名代表成員變量;如果同名,那麼方法內的變量名就只表示局部變量了,和成員變量一毛錢關系都沒有了。
所以,首先當我們創建了一個Person對象p,在創建對象的時候就已經完成了成員變量的初始化了。成員變量age的初始值是1000。
當我們p.setAge(20)的時候,其實這個20只在setAge這個方法內起作用,所以輸出了方法內年齡20,執行完這句話後,20就被銷毀了。
然後執行sayHello,它裡面的age代表的是成員變量的值,所以依舊是1000。
到這裡如果還是不能理解,可以自己寫代碼看輸出結果體會下。
那麼,當同名的時候,我們就是要讓這個變量名表示成員變量,有沒有辦法呢?
那就要說到this關鍵字了。我們把Person類改成這樣:
public class Person { private int age=1000; public void setAge(int age) { this.age=age; System.out.println("方法內的年齡"+age); } public void sayHello() { System.out.println("我的年齡是"+age+"."); } }
再運行代碼,發現代碼運行結果變成了下面這樣:
//方法內的年齡20 //我的年齡是20.
this表示的是當前對象。
this.age在這裡具體表示p對象的age(即p對象的成員變量age)的值是20。
不能理解的話就多寫寫代碼就能理解了。