1. 程式人生 > >JAVA中的引數傳遞原則

JAVA中的引數傳遞原則

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!