Java是值傳遞還是引用傳遞

Java的八種基本數據類型是值傳遞(只是數值的傳遞,更原來的變量沒有關係,原值不會發生改變),但是如果是數據是對象類型的那麼就是引用的傳遞,例子如下:

package com.minimax.demo;

public class Test {

	
	public static void main(String[] args) {
        int a=10;
        System.out.println("before change(a)..a.."+a);
		change(a);
		System.out.println("after change(a)..a.."+a);
		//總結:Java在基本參數的傳遞是值傳遞,就是說傳遞的參數只是原來數值的拷貝,不管在方法中傳進來的數值是否發生改變
		//都與原來的數據沒有任何關係,不會造成任何影響
		
		StringBuffer str=new StringBuffer();
		str.append("zhangsan");
		System.out.println("before change2(str)..."+str);
		change2(str);
		System.out.println("after change2(str)..."+str);
	}

	private static void change2(StringBuffer str2) {
		// TODO Auto-generated method stub
		//這是改造一
		//改造一的輸出是 zhangsan,nihao
		//因爲在調用change2(str2)方法的時候 傳遞過來的str是對象的引用,這個引用存放的是該對象在對內存中的地址
		//然後進到change2(str2)方法之後 就是把str所保存的對象地址拷貝了一份給str2,然後str2就擁有了指向該
		//對象的地址 然後就可以修改對象中的內容 而str所保存的地址始終沒有發生變化
		//str2.append(",nihao");
		//這個改造二
		//改造方法二 則就是因爲使用了 new這個關鍵字 創建了一個新的對象在堆內存中,自然而然的,就會分配一個新的內存地址
		//所以str2就擁有了新的對象內存的地址 這樣str2就是新的對象的引用,可以操作新的對象 ,而與傳遞進來拷貝的內存
		//地址沒有一點關係 ,所以不會修改原來的對象的內容
		//所以最後的測試結果就是  zhangsan
		str2=new StringBuffer();
		str2.append(",nihao");
	}

	private static void change(int b) {
		b=12;
	}


	
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章