1.基本型別與引用型別區別
對於基本型別(int , long , short , double , char , byte , float , boolean ),變數直接儲存資料的值;
對於引用型別,變數儲存的是物件的位址,由此位址指向實際物件。如圖:
對於基本型別,直接傳值,方法裡進行重新賦值不會導致原值改變:
public
class test
public
static
void
main(string args)
}
輸出:0
public
class test
public
static
void
main(string args)
}
輸出:hello
string是引用型別,按理說應該方法中的值會改變原來的值,但是這裡輸出的是hello。因為string這種引用型別比較特殊,其實傳入方法的是乙個副本,不管方法內怎麼改變string的值,都是使副本指向了這個string 值。
main方法內的n一開始指向的是hello這塊資料,呼叫change方法時,傳入的是n的乙個副本,相當於重新new 乙個string,所以對其的操作並不會對外面的n造成影響。
2.陣列
public
class test
public
static
void
main(string args) ; // 陣列
int ii = ;// 陣列
change(c,ii);
system.out.println(c[0] + " " + ii[0]);}}
輸出:g 8
陣列也是引用型別,傳入的是引用,在方法內操作會改變原始值。
3.對於物件
public
class test
public
static
void
main(string args)
}class student
輸出: lisi
物件是引用型別,會改變原始值~
再看個例子:
public
class test
public
static
void
main(string args)
}class student
輸出: zhangsan
這個傳入的雖然是引用型別,但方法內部改變了原物件的指向,方法內操作的相當於乙個新的物件。所以不會改變原物件的屬性。
傳入時,方法內s 跟main方法內的s都是指向zhangsan,當change方法裡面重新new 乙個student並賦值後,change方法裡的s已經指向了乙個新的物件,main方法裡還是指向原來的物件,並不會因為change方法裡的操作做任何改變。
最後乙個:
public
class test
public
static
void
main(string args)
}class student
輸出: lisi
這個例子相比上個例子就是將student的name屬性變成了static,全域性變數了,這樣即使在change方法內重新new了乙個物件,指向不同,也還是會改變這個屬性的,道理很簡單, 全域性變數啊!
傳值與傳引用
python的函式傳值和傳引用,和c c 語言是一樣的。在開始之前,我們有必要分清一下python的一些基礎概念。首先要說的是 變數 與 物件 在python中,型別屬於物件,變數是沒有型別的,這正是python的語言特性,也是吸引著很多pythoner的一點。所有的變數都可以理解是記憶體中乙個物件...
java引數傳值 傳引用
1 結論 2 傳值和傳引用區別 例項1 傳值 void method1 7 void method2 13 voidchange1 stringbuffer sb 17 voidchange2 stringbuffer sb 呼叫method1 螢幕列印結果為 helloworld 呼叫method...
傳值傳引用的問題
include include include include nicai.h include using namespace std class fer private int fengzi int c int fengmu public void setnumber fer we void ad...