按值傳遞和按引用傳遞。按值傳遞意味着當將一個參數傳遞給一個函數時,函數接收的是原始值的一個副本。所以,若是函數修改了該參數,僅改變副本,而原始值保持不變。按引用傳遞意味着當將一個參數傳遞給一個函數時,函數接收的是原始值的內存地址,而不是值的副本。所以,若是函數修改了該參數,調用代碼中的原始值也隨之改變。數組
一、對象是按引用傳遞的
二、Java 應用程序有且僅有的一種參數傳遞機制,即按值傳遞(引用傳值傳遞的是原始值的內存地址,其實也是一種按值傳遞)
三、按值傳遞意味着當將一個參數傳遞給一個函數時,函數接收的是原始值的一個副本
四、按引用傳遞意味着當將一個參數傳遞給一個函數時,函數接收的是原始值的內存地址,而不是值的副本函數
1 public class ParamterE2 { 2
3 public static class ParamterE3{ 4 public String name="xiaotiaosi"; 5 } 6
7 public static void run(ParamterE3 paramterE3,String a,int b){ 8 ParamterE3 paramterE=paramterE3; 9 paramterE.name="xiaohua111"; 10 a="girl"; 11 b=1; 12 } 13
14 public static void main(String[] args) { 15 ParamterE2 paramterE2=new ParamterE2(); 16 ParamterE3 paramterE3=new ParamterE3(); 17 String a="boy"; 18 int b=0; 19 paramterE2.run(paramterE3,a,b); 20 System.out.println(paramterE3.name+" "+a+" "+b); 21 } 22 }
程序運行的結果爲:xiaohua111 boy 0spa
原始對象內的成員變量name的值改變,原始String類型的變量a 和原始int類型的變量b值沒有發生改變。code
說明:對象
1.對象就是傳引用
2.原始類型就是傳值(boolean 、char、byte、short、int、long、float、double)
3.String類型由於沒有提供自身修改的函數,每次操做都是新生成一個String對象,因此要特殊對待。能夠認爲是傳值。blog
注:經過查資料發現String類型比較特殊,在Java中,String是一個引用類型,可是在做爲參數傳遞的時候表現出來的倒是基本類型的特性。
緣由:首先咱們看一下String類的實現,String類是經過private final char value[]數組實現的,從給的數組咱們可以發現這個char[]數組使用了final關鍵字修飾,也就意味着,這個String類型的對象不可變,那麼就有人要問了,既然不可變,那麼咱們如何修改字符串的值喃?例如:String str="xiaotiaosi321";如何將已建立的字符串對象修改爲"xiaoshuaige321",首先我想給大家掃除一個誤區,String類建立的字符串對象是不可變的,也就是修改不了的,哪有人就要問了,爲啥str="xiaoshuaige321";語句好使啊,首先str並不能徹底表明String類建立的字符串對象,str只是一個字符串變量的引用,str="xiaoshuaige321";語句只是將str引用指向了"xiaoshuaige321"字符串對象,至關於str=new String("xiaoshuaige321"); ,因此當String做爲傳參類型時,在方法中進行了字符串引用的從新複製時,只是將引用指向了新的對象,並無對原始的對象進行修改,當方法執行完畢以後,做爲虛擬機棧中局部變量都會被銷燬,方法一些操做被還原,str引用從新指向"xiaotiaosi321";,故執行後和執行前值沒有改變。內存