1.先從值引用:
String a ="God";//a存放在stack 中 God存放在head(堆中)創建了兩個對象
String b=a;
a指向堆中的God對象
b=a;說明b也指向了head中的God對象 ;b=a 只創建了一個對象b
此時進行b=“other god” 並不是改變b原有的值,因爲String類final 修飾的類,所以在進行賦值的時候就在隊中新建了一個 other 對象,然後將b指向other god這個對象。
下面我們進行一個數據交換的操作
public void swap(int a,int b){
int temp=a;
a=b;
b=a;
System.out.println(a+"="+b);10 20
}
main(){
int a=20;
b=10;
swap(a,b);
System.out.println(a+"="+b);20 10
}
可以發現main 方法中的a,b值並沒有發生改變 ,所以他是值傳遞
2.引用傳遞
void method(StringBuffer sb){
sb.append("zzz");
}
main(){
StringBuffer sb=new StringBuffer("dd");
method(sb);
System.out.println(sb.toString());
}
可以看出sb 的值變成了ddzzz,一對應可以有很多個引用變量,但都是針對同一對象進行操作
總結:常用的數據類型如(int ,double)是值傳遞,自己定義的對象則是引用傳遞。