先看下網上關於值傳遞和引用傳遞的概念java
值傳遞:方法調用時,實際參數把它的值傳遞給對應的形式參數,函數接收的是原始值的一個copy,此時內存中存在兩個相等的基本類型,即實際參數和形式參數,後面方法中的操做都是對形參這個值的修改,不影響實際參數的值函數
引用傳遞:也稱爲傳地址。方法調用時,實際參數的引用(地址,而不是參數的值)被傳遞給方法中相對應的形式參數,函數接收的是原始值的內存地址,在方法執行中,形參和實參內容相同,指向同一塊內存地址,方法執行中對引用的操做將會影響到實際對象。spa
先無論值傳遞仍是引用傳遞,直接來看例子code
eg(1)對象
public class Test1 { public static void main(String[] args) { Person a = new Person(23, "a" ); Person b = new Person(22, "b" ); System.out.println( "改變前a:" + a + "\nb:" + b); changeValue(a, b); System.out.println( "改變後a:" + a + "\nb:" + b); } private static void changeValue(Person a, Person b) { a.setAge( 10 ); b.setAge( 11 ); } }
輸出blog
改變前a:Person [age=23] b:Person [age=22] 改變後a:Person [age=10] b:Person [age=11]
理解內存圖內存
eg(2)it
public class Test1 { public static void main(String[] args) { Person a = new Person(23, "a" ); Person b = new Person(22, "b" ); System.out.println( "改變前a:" + a + "\nb:" + b); changeValue(a, b); System.out.println( "改變後a:" + a + "\nb:" + b); } private static void changeValue(Person a, Person b) { Person temp = a; a = b; b = temp; } }
輸出class
改變前a:Person [age=23 ] b:Person [age =22 ] 改變後a:Person [age =23 ] b:Person [age =22]
理解內存圖引用