Java 方法使用到底是值傳遞還是引用傳遞

2021-09-11 14:38:25 字數 883 閱讀 1258

一、定理:1.如果引數是基本型別,傳遞的是基本型別的字面量值的拷貝。

2. 如果引數是引用型別,傳遞的是該參量所引用的物件在堆中位址值的拷貝

簡單的理解這句話的意思:資料型別是基本型別 ------------------值傳遞。

資料型別是引用型別 -----------------位址拷貝傳遞。

1.問:什麼是基本型別,什麼是引用型別?

基本型別:byte、short、int、long、float、double、char、boolean  。 除了這八種,其他的都是引用型別的。我們自己寫的類就是引用型別的,string  是一種特殊的引用型別。看看以下列子:

public static void main(string args)

執行結果是:

add 前,  a= 5

add 前,st1= hello word

add 前,builder= stringbuilder

add 後,a= 5

add 後,st1= hello word

add 後,builder= stringbuilderadd hello

a是基本型別,所以前後數值不變,builder是引用型別所以執行了add後數值改變。st1是引用型別,按理來說執行add後應該改變其值,但是結果卻是沒有。為什麼呢?答案在string本身上。在這裡要永遠記住一點:「string物件一旦被建立就是固定不變的了,對string物件的任何改變都不影響到原物件,相關的任何change操作都會生成新的物件」。意思也就是說在執行了add後建立了新string物件,add方法中的st所指向指向新string物件的位址,st1還是指向 "hello word"這個位址。

實體作為引數傳遞,到底是值傳遞還是引用傳遞

1.新建乙個student實體類 public class student public student string name,integer age public string getname public void setname string name public integer geta...

Java是值傳遞還是引用傳遞?

廢話不多說,上 很簡單,圖一中呼叫靜態方法intvalues int t 毫無疑問是傳遞值,因為如果是引用傳遞,那麼二者列印的值是一致的。很明顯,a 之後,t的值沒有發生改變。圖二也是一樣,清晰明了,把方法引數的值賦值給a,然後改變a的值,二者值列印均一致,那是因為t代表的是乙個堆記憶體的位址,基本...

Java是值傳遞還是引用傳遞

基本型別 如上圖所示,基本型別傳遞時,執行緒在棧上分配形式引數並拷貝實際引數的值。create with intellij idea author wangzhenpeng date 2018 4 8 time 上午9 48 e mail wangzhenpeng0924 163.com descr...