Java方法調用時的參數傳遞都是值傳遞
基本類型的參數值傳遞
void methodA(){
int a=5;
methodB(i);
}
void methodB(int i ){ //創建一個棧幀,創建一個本地變量i,並在棧幀中開闢4個字節空間,將傳遞來的數值5存儲到這個空間中。
i=i+3;
}
在上例中,A調用B方法後,將int型變量a的值,傳遞給方法B的參數i,無論變量i怎麼變,都只是變量i自己的事兒,跟變量a無關了,變量a的值永遠是5。
引用類型變量的參數值傳遞
class Person{
String name;
void setName(String name){
this.name = name;
}
}
class Test{
void methodA(){
Person p = new Person(); // 變量p中存儲的是new Person()創建出的對象的存儲地址,即引用,佔4個字節
methodB(p);
}
void methodB(Person person ){ // 創建了一個棧幀,並創建一個變量person,爲其開闢4個字節的存儲空間,將變量p的值,即對象的存儲地址存放到這個變量person的空間中去。
person.setName("jack");
}
}
上例中,A調用B時,將變量p的值即對象的存儲地址傳遞給了B方法中的變量person,無論方法B中person變量的值怎麼變,A中變量p的值永遠都不會變,永遠存儲的是 new Person()創建出來的對象的存儲地址。