JAVA中的引數傳遞原則
阿新 • • 發佈:2019-01-10
JAVA中的引數傳遞全是以值傳遞的
總的來說,簡單概括Java中進行方法呼叫的時候傳遞引數時,遵循值傳遞的原則:
1)基本資料型別,傳遞的是資料的拷貝 。“值傳遞”,在這種方式下,被呼叫物件對新資料的改變不影響源資料的取值,如基本型別的傳遞
//例1
void method1(){
int x=0;
this.change(x);
System.out.println(x);
}
void int change(int i){
i=1;
}
結果:x=0;
2)引用資料型別,傳遞的是傳遞的引用地址的拷貝,而不是該物件本身 。被呼叫物件新資料的改變影響源資料內容,因為新資料和源資料的引用雖然不同但卻指向同一資料物件,如型別物件的傳遞。
void method1(){
StringBuffer x=new StringBuffer("Hello");
this.change(x);
System.out.println(x);
}
void int change(StringBuffer i){
i.append(" world!");
}
結果:x=Hello world;
String是一個比較特殊的資料型別,在Java中,String是一個類,但是他的傳值卻是採用“值傳遞”的方式。
首先String不屬於8種基本資料型別,String是一個物件。
3.深刻理解引用傳遞
package AsbstractFactory; public class Test { public static void change(StringBuffer i) { //i值這時和x一樣,都指向同一個物件 System.out.println("i值這時和x一樣,都指向同一個物件---"+i); //i和x指向的那個物件值發生變化 i.append(" world!"); System.out.println("i和x指向的那個物件值發生變化--"+i); //i指向的地方和x不在一樣 i=null將i這個引用指向了記憶體中一個空地址(沒任何東西,null) i=null; System.out.println(i); //在堆記憶體中建新的物件,指向i指向這個新地址 i=new StringBuffer("i指向新的物件"); System.out.println(i); } public static void main(String[] args) { StringBuffer x = new StringBuffer("Hello"); change(x);//引用資料型別,傳遞的是傳遞的引用地址的拷貝 System.out.println("輸出的還是x指向物件的值----"+x);//輸出的還是x指向物件的值,x應用物件的值被改變了一次 } } 結果: i值這時和x一樣,都指向同一個物件---Hello i和x指向的那個物件值發生變化--Hello world! null i指向新的物件 輸出的還是x指向物件的值----Hello world!