Java 值傳遞和引用傳遞

2021-08-19 22:20:36 字數 1526 閱讀 3319

一、值傳遞

方法呼叫時,實際引數把它的值傳遞給對應的形式引數,函式接收的是原始值的乙個copy,

此時記憶體中存在兩個相等的基本型別,即實際引數和形式引數

,後面方法中的操作都是對形參這個值的修改,不影響實際引數的值

。看下面這個值傳遞的例子。

public

class

transfertest

public

static

void

changenum(

intx)

}輸出結果:

changenum()方法呼叫之前:num =

1changenum()方法呼叫之前:num =

1二、引用傳遞

也稱為傳位址。方法呼叫時,實際引數的引用(位址,而不是引數的值)被傳遞給方法中相對應的形式引數,函式接收的是原始值的記憶體位址;

在方法執行中,形參和實參內容相同,指向同一塊記憶體位址,方法執行中對引用的操作將會影響到實際物件

。看下面這個例子

。public

static

void

main

(string args) ;

change(arr);

system.out.println(arr[

0]);

}//將陣列的第乙個元素變為0

public

static

void

change

(int

array)

注意:考慮string,以及integer、double等幾個基本型別包裝類,它們都是immutable型別,而stringbuffer、stringbuilder是mutable型別

。因為沒有提供自身修改的函式,每次操作都是新生成乙個物件,所以要特殊對待,可以認為是和基本資料型別相似,傳值操作。

看下面例子。

publicclassreferencepkvalue1

publicvoidchange(string str)

publicvoidchange(stringbuffer str)

}

輸出是:

hello        

helloworld             

對string和stringbuffer的操作產生了不同的結果。

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

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

(3)string, integer, double等immutable的型別特殊處理,可以理解為傳值,最後的操作不會修改實參物件。

java 值傳遞和引用傳遞

值傳遞 方法呼叫時,實際引數把它的值傳遞給對應的形式引數,方法執行中形式引數值的改變不影響實際參 數的值。引用傳遞 也稱為傳位址。方法呼叫時,實際引數的引用 位址,而不是引數的值 被傳遞給方法中相對應的形式引數,在方法執行中,對形式引數的操作實際上就是對實際引數的操作,方法執行中形式引數值的改變將會...

Java的值傳遞和引用傳遞

值傳遞 值傳遞是基本資料型別的資料傳遞,是棧中的資料 基本資料型別的資料作為方法的引數進行傳遞,那麼在方法中會另外開闢乙個新的記憶體空間,跟原來的記憶體空間不是乙個記憶體空間,如果在方法中對引數的值進行更改,不糊影響原來的記憶體空間的值 如果非要獲取方法中修改後的值,則需要把修改後的值返回出來 引用...

值傳遞和引用傳遞

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