引用傳遞和值傳遞

2022-09-16 07:15:11 字數 1407 閱讀 4854

(1)基本資料型別傳值,對形參的修改不會影響實參;

(2)引用型別傳引用,形參和實參指向同乙個記憶體位址(同乙個物件),所以對引數的修改會影響到實際的物件;

值傳遞:(形式引數型別是基本資料型別):方法呼叫時,實際引數把它的值傳遞給對應的形式引數,形式引數只是用實際引數的值初始化自己的儲存單元內容,是兩個不同的儲存單元,所以方法執行中形式引數值的改變不影響實際引數的值。

引用傳遞:(形式引數型別是引用資料型別引數):也稱為傳位址。方法呼叫時,實際引數是物件(或陣列),這時實際引數與形式引數指向同乙個位址,在方法執行中,對形式引數的操作實際上就是對實際引數的操作,這個結果在方法結束後被保留了下來,所以方法執行中形式引數的改變將會影響實際引數。

所謂值傳遞,就是說僅將物件的值傳遞給目標物件,就相當於copy;系統將為目標物件重新開闢乙個完全相同的記憶體空間。

所謂引用,就是說將物件在記憶體中的位址傳遞給目標物件,就相當於使目標物件和原始物件對應同乙個記憶體儲存空間。此時,如果對目標物件進行修改,記憶體中的資料也會改變。

值傳遞,例如:

class testt1 

public static void exchange(int a,int b)  

} 程式的結果是5.

這說明,原始資料型別是按值傳遞的,這個按值傳遞也是指的是進行賦值時的行為。 

j**a語言明確說明取消了指標,因為指標往往是在帶來方便的同時也是導致**不安全的根源,同時也會使程式的變得非常複雜難以理解,但這只是在j**a語言中沒有明確的指標定義,實質上每乙個new語句返回的都是乙個指標的引用。引用傳遞,例如:

class testt2 

} 物件s和s2指向的是記憶體中的同乙個位址因此指向的是同乙個物件。 

這裡的意思是進行物件賦值操作是傳遞的是物件的引用,因此物件是按引用傳遞的。 

程式執行的輸出是: 

good afternoon. 

這說明s2和s是同乙個物件。

總結: 

大家都知道,在j**a中變數有以下兩種:

基本型別變數,包括boolean、byte、char、short、int、long、float、double。

引用型別變數,包括類、介面、陣列(基本型別陣列和物件陣列)。

對於基本型別和基本型別變數被當作引數傳遞給方法時,是值傳遞。在方法實體中,無法給原變數重新賦值,也無法改變它的值。

而物件作為引數,如果在方法中把物件作為引數,方法呼叫時,引數傳遞的是物件的引用,即在方法呼叫時,實際引數把對物件的引用傳遞給形式引數。這是實際引數與形式引數指向同乙個位址,即同乙個物件,方法執行時,對形式引數的改變實際上就是對實際引數的改變,這個結果在呼叫結束後被保留了下來。

值傳遞和引用傳遞

幾乎每種語言都有值傳遞和引用傳遞.下面是我的一些曲解,只講現象,不涉及到任何的原理,主要是鬧著玩的.a 新交了個女朋友b.有一天他女朋友b看見a在吃冰激凌,b想吃,但是a是個 座有點小潔癖,不想讓b吃,於是給b買了個新的冰激凌說你吃這個吧,別碰我嘴裡這個.這就是值傳遞.a和b的值沒有任何關係,他們一...

值傳遞和引用傳遞

1.什麼是值傳遞和引用傳遞 值傳遞 方法呼叫時,實際引數的值copy乙份傳遞給形式引數,此時,有兩個相等的數值分別儲存於不同的記憶體位址上,因此,後面的方法中都是對形參位址上的數值進行修改。引用傳遞 方法呼叫時,實際引數的值 也就是位址 copy乙份傳遞給形式引數,此時,形參和實參的引用都指向同一儲...

值傳遞和引用傳遞

定義 通過建立乙個實際引數的副本,再傳遞給方法的形式引數,在main自身並不會被使用。這個在我們第一次使用編寫交換數的方法時,基本都會遇見,當我呼叫a,b兩個變數時,通過交換方法交換他們的位置,但是沒用,這就是值傳遞,乙個坑 public class switchnum switchnum a,b ...