快速搞懂值傳遞與引用傳遞
值傳遞
- 基本資料型別作為引數的方法呼叫
- 實參給形參傳遞資料的方式,直接將值複製一份給形參,實參和形參在記憶體上兩個方法中的 互相獨立的區域性變數 不涉及到引用對記憶體中的資料,修改形參不會影響實參
- 示例:
public class test {
public static void change(int x){
x=100;
}
public static void main(String[] args) {
int x=10;
change(x);
System.out.println(x);
}
}
輸出:
10
引用傳遞
- 在方法呼叫中,傳遞的是物件(地址)
- 實參傳遞給形參的資料的方式,將對於堆記憶體中的引用傳遞給形參,形參和實參在記憶體就會執行堆記憶體上的同一個區域,此時修改形參就是在修改實參
- 示例:
public class test {
public static void change(Student student1){
student1.age=100;
}
public static void main(String[] args) {
Student student=new Student(10);
System.out.println(student.age);
change(student);
System.out.println(student.age);
}
}
class Student{
int age;
public Student(int age) {
this.age = age;
}
}
輸出:
10
100
注意
- 基本資料型別的引數是值傳遞,引用資料型別的引數傳遞是引用(地址),本質上也是值傳遞
雷區
public class test {
public static void change(Student student1){
student1=new Student(20);
}
public static void main(String[] args) {
Student student=new Student(10);
System.out.println(student.age);
change(student);
System.out.println(student.age);
}
}
class Student{
int age;
public Student(int age) {
this.age = age;
}
}
輸出:
10
- 這種情況也是引用傳遞,呼叫的方法時,傳的確實是地址,但是執行的程式碼中,此時又建立了一個新的物件,則此時student1指向的地址不再是之前傳遞的地址,而是新的地址,故不會改變值。
相關文章
- 值傳遞和引用傳遞
- golang工作筆記(二)值傳遞與引用傳遞Golang筆記
- JavaScript的值傳遞和引用傳遞JavaScript
- Java的值傳遞和引用傳遞Java
- Day30--值傳遞和引用傳遞
- Java - 是值傳遞還是引用傳遞Java
- c++指標傳遞與引用傳遞C++指標
- 解惑4:java是值傳遞還是引用傳遞Java
- 關於值傳遞和引用傳遞的解釋
- C#|.net core 基礎 - 值傳遞 vs 引用傳遞C#
- Java 從陣列來看值傳遞和引用傳遞Java陣列
- 面試官問:Go 中的引數傳遞是值傳遞還是引用傳遞?面試Go
- C#程式設計引用型別和值型別 以及引用傳遞和值傳遞C#程式設計型別
- Python的函式引數傳遞:傳值?引用?Python函式
- Java是值傳遞還是引用傳遞,又是怎麼體現的Java
- 關於String是值傳遞還是引用傳遞,talk is cheap, just show codes
- 這一次,徹底解決Java的值傳遞和引用傳遞Java
- Go語言引數傳遞是傳值?還是傳引用 ?Go
- Python引數傳遞,既不是傳值也不是傳引用Python
- chan中傳遞map資料,傳遞的是引用
- 引數傳遞方式必須是const引用傳遞
- 這一次,讓你徹底理解Java的值傳遞和引用傳遞!Java
- 面試官:兄弟,說說Java到底是值傳遞還是引用傳遞面試Java
- go 值傳遞和地址傳遞的例子Go
- java值傳遞Java
- 按值傳遞
- [精]--這一次,讓你徹底明白Java的值傳遞和引用傳遞!Java
- go語言引數傳遞到底是傳值還是傳引用Go
- JS的方法引數傳遞(按值傳遞)JS
- Java只有值傳遞Java
- PHP中物件的引用傳遞PHP物件
- JavaScript之按值傳遞JavaScript
- python的賦值傳遞Python賦值
- Golang中函式傳參存在引用傳遞嗎?Golang函式
- html、php和js值的傳遞(使用ajax進行傳遞)HTMLPHPJS
- PHP 物件導向 (四)類物件賦值為引用傳遞PHP物件賦值
- ABAP 方法呼叫的引數傳遞裡,透過引用傳遞的方式,能修改原始引數值嗎?
- JavaScript 是如何工作的:JavaScript 的共享傳遞和按值傳遞JavaScript