修改引用的值 與 修改引用

2021-10-09 07:53:20 字數 618 閱讀 4415

class program

; person p2 = p1;

p1.name = "bill";

p1 = new person ;

}}

person p1 = new person ;

解析:在棧上分配乙個變數p1,p1的型別為person;在堆上分配乙個person例項,該例項的name為andy;將p1 指向andy例項。

person p2 = p1;

解析:在棧上分配乙個變數p2,p2的型別為person;將p1 賦值給p2;這時候p1,p2 都指向andy例項。

p1.name = "bill";

解析:修改引用的值。將p1的name修改為bill,實際上是修改p1指向的andy例項,將andy例項的name修改為bill;由於p1,p2同時指向andy例項,此時p1,p2的name都是bill,簡稱bill例項。

p1 = new person ;

解析:修改引用。在堆上分配乙個person例項,該例項的name為carol;將p1指向carol例項;此時,p1指向carol例項,而p2仍然指向bill例項。

不可修改的原始值與可修改的物件引用

j ascript中的原始值 undefined null 布林值 數值和字串 與物件 包括陣列和函式 有乙個本質的區別。原始值是不可修改的,即沒有辦法改變原始值。對於數值和布林值,這一點很好理解 修改乙個數值的值沒什麼用。可是,對於字串,這一點就不太好理解了。因為字串類似字元陣列,我們或許認為可以...

左值引用與右值引用

引用的本質是乙個閹割的指標,它是乙個物件的別名,通過操作符 來實現,c 11又提出了乙個左值引用與右值引用的概念。這裡提一下變數的兩個屬性 左值和右值,左值是變數的位址,右值是變數儲存的內容,變數的本質即儲存空間的名稱,編譯後為對應的位址。左值引用 乙個c 引用宣告後必須被初始化,否則會編譯不過,初...

C 左值引用與右值引用

我們平常說的引用,一般來說都會預設為左值引用。即為某乙個物件起一別名,是間接訪問的一種實現方式。引用有許多的作用,例如傳參中避免發生拷貝,在一定程度上我們可以提公升效能。又例如傳參時,實參為陣列,我們知道陣列是不能整體拷貝,故我們也可以通過引用來實現。左值,右值 左值,右值都是表示式的屬性。c 中的...