快速搞懂值傳遞與引用傳遞
值傳遞
- 基本資料型別作為引數的方法呼叫
- 實參給形參傳遞資料的方式,直接將值複製一份給形參,實參和形參在記憶體上兩個方法中的 互相獨立的區域性變數 不涉及到引用對記憶體中的資料,修改形參不會影響實參
- 示例:
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指向的地址不再是之前傳遞的地址,而是新的地址,故不會改變值。
相關文章
- 值傳遞與引用傳遞
- 值傳遞和引用傳遞
- JavaScript的值傳遞和引用傳遞JavaScript
- golang工作筆記(二)值傳遞與引用傳遞Golang筆記
- Java - 是值傳遞還是引用傳遞Java
- Java中的值傳遞和引用傳遞Java
- 解惑4:java是值傳遞還是引用傳遞Java
- 關於值傳遞和引用傳遞的解釋
- java方法中只有值傳遞,沒有引用傳遞Java
- JS是按值傳遞還是按引用傳遞?JS
- Java 從陣列來看值傳遞和引用傳遞Java陣列
- js中函式引數值傳遞和引用傳遞JS函式
- ES5中的值傳遞/引用傳遞--解釋
- 面試官問:Go 中的引數傳遞是值傳遞還是引用傳遞?面試Go
- C#程式設計引用型別和值型別 以及引用傳遞和值傳遞C#程式設計型別
- Java引數傳遞是傳值還是傳引用?Java
- js函式引數值傳遞和引用傳遞簡單介紹JS函式
- Python的函式引數傳遞:傳值?引用?Python函式
- 面試官:兄弟,說說Java到底是值傳遞還是引用傳遞面試Java
- 這一次,徹底解決Java的值傳遞和引用傳遞Java
- Go語言引數傳遞是傳值?還是傳引用 ?Go
- Go語言引數傳遞是傳值還是傳引用Go
- chan中傳遞map資料,傳遞的是引用
- go 值傳遞和地址傳遞的例子Go
- 這一次,讓你徹底理解Java的值傳遞和引用傳遞!Java
- Python引數傳遞,既不是傳值也不是傳引用Python
- 引數傳遞方式必須是const引用傳遞
- 關於String是值傳遞還是引用傳遞,talk is cheap, just show codes
- [精]--這一次,讓你徹底明白Java的值傳遞和引用傳遞!Java
- 搗漿糊的老話題:Java是按值傳遞還是按引用傳遞Java
- JS的方法引數傳遞(按值傳遞)JS
- go語言引數傳遞到底是傳值還是傳引用Go
- 偽命題:Java傳遞的值還是引用?Java
- Java只有值傳遞Java
- javasript 按值傳遞Java
- C++中引用傳遞與指標傳遞區別(進一步整理)C++指標
- php函式的傳值如果需要引用傳遞注意的細節PHP函式
- PHP中物件的引用傳遞PHP物件