首先看一個案例:
package android.java.oop04; class Person { public String name; public void showName() { System.out.println("名字是:" + name); } } /** * 引用類型參數傳遞 */ public class OopDemo01 { public static void main(String[] args) { Person p = new Person(); p.name = "連城劍法"; myMethod(p); p.showName(); // 打印name值 } static void myMethod(Person p) { p.name = "神照經"; } }
執行結果:java
名字是:神照經android
根據以上代碼,分析而後在內存中開闢分配處理原理:
1.main方法被 JVM 準備執行,而後main被JVM執行,而後main就在棧內存中壓棧;
2.在棧內存中 new Person(); , 這個 new Person(); 將會在堆內存中開闢控件構建對象 Person對象 分配內存地址089#f;oop
3.在棧內存中 Person p = 引用的地址是:89#f,意思就是 棧內存中的 p指向了 ----> 堆內存中的Person對象,根據惟一的內存地址89#f指定
4.在棧內存中 p.name="連城劍法" 是經過對象引用地址89#f,去修改堆中Person對象的name屬性的值 爲」連城劍法「spa
5.在棧內存中 調用myMethod(p)方法,此時myMethod方法會壓棧/進棧;
6.在棧內存中 myMethod(Person p)方法中的參數p,此時的對象內存地址是89#f,和main方法的p對象地址同樣;
7.在棧內存中 myMethod(Person p)方法中的參數p,p.name = "神照經" 是經過對象內存地址89#f 去修改--->堆內存中Person對象的name成員變量 爲"神照經"code