值傳遞與引用傳遞
一般資料型別(byte,char,int,float,double,long,String,Integer,Long,Float,Double)是值傳遞,也可以稱為拷貝傳遞,即拷貝實參的值然後初始化形參;其他的(Object)是引用傳遞,即傳遞地址,引用傳遞形參可以修改實參例項成員的值,但不能借助重新給形參賦值而間接地讓實參指向一個新的堆地址。
private void f3(StringBuilder s) {
s.append(",haha");
s = new StringBuilder("hello,bitch");
}
StringBuilder stringBuilder = new StringBuilder("yui");
f3(stringBuilder);
System.out.println(stringBuilder);
output:
yui,haha
可以用 幀棧
或者 全域性變數和區域性變數
來解釋:
f3()的方法形參為 StringBuilder s
,可以理解為在f3()函式的內部宣告一個 StringBuilder s
變數,當執行 f3(stringBuilder)
呼叫操作時,實際上是用實參 StringBuilder stringBuilder
指向的堆 new StringBuilder("yui")
的 地址
來初始化 s
,但是,在棧上看來,stringBuidler
和 s
是兩個不同的地址,在執行 s.append(",haha");
時,stringBuidler
和 s
指向的是堆上的同一個地址,所以 s
可以修改 new StringBuilder("yui")
例項的值。執行 s = new StringBuilder("hello,bitch")
賦值語句時,只是把方法內部宣告的 StringBuilder s
變數指向新的堆地址 StringBuilder("hello,bitch")
,但棧上的 stringBuilder
仍然指向 new StringBuilder("yui")
。
引用傳遞只是傳遞 實參指向的堆地址
而不是傳遞 實參棧上地址的引用
。
相關文章
- 快速搞懂值傳遞與引用傳遞
- 值傳遞和引用傳遞
- JavaScript的值傳遞和引用傳遞JavaScript
- Java的值傳遞和引用傳遞Java
- golang工作筆記(二)值傳遞與引用傳遞Golang筆記
- Java - 是值傳遞還是引用傳遞Java
- Java中的值傳遞和引用傳遞Java
- Day30--值傳遞和引用傳遞
- c++指標傳遞與引用傳遞C++指標
- 解惑4:java是值傳遞還是引用傳遞Java
- 關於值傳遞和引用傳遞的解釋
- java方法中只有值傳遞,沒有引用傳遞Java
- JS是按值傳遞還是按引用傳遞?JS
- Java 從陣列來看值傳遞和引用傳遞Java陣列
- js中函式引數值傳遞和引用傳遞JS函式
- ES5中的值傳遞/引用傳遞--解釋
- C#|.net core 基礎 - 值傳遞 vs 引用傳遞C#
- 面試官問:Go 中的引數傳遞是值傳遞還是引用傳遞?面試Go
- C#程式設計引用型別和值型別 以及引用傳遞和值傳遞C#程式設計型別
- Java引數傳遞是傳值還是傳引用?Java
- js函式引數值傳遞和引用傳遞簡單介紹JS函式
- Java是值傳遞還是引用傳遞,又是怎麼體現的Java
- Python的函式引數傳遞:傳值?引用?Python函式
- 面試官:兄弟,說說Java到底是值傳遞還是引用傳遞面試Java
- 這一次,徹底解決Java的值傳遞和引用傳遞Java
- Go語言引數傳遞是傳值?還是傳引用 ?Go
- Go語言引數傳遞是傳值還是傳引用Go
- chan中傳遞map資料,傳遞的是引用
- go 值傳遞和地址傳遞的例子Go
- 這一次,讓你徹底理解Java的值傳遞和引用傳遞!Java
- java值傳遞Java
- 按值傳遞
- Python引數傳遞,既不是傳值也不是傳引用Python
- 引數傳遞方式必須是const引用傳遞
- 關於String是值傳遞還是引用傳遞,talk is cheap, just show codes
- [精]--這一次,讓你徹底明白Java的值傳遞和引用傳遞!Java
- 搗漿糊的老話題:Java是按值傳遞還是按引用傳遞Java
- JS的方法引數傳遞(按值傳遞)JS