值型別和引用型別

2022-09-05 05:06:12 字數 790 閱讀 7948

值型別

var a = 100;

var b =a;

a = 200console.log(b);

//100

變數a賦值成100,再將a賦值給b,這個時候a的值變了,b的值不會跟著變,這是值型別的特點

引用型別(物件,陣列,函式)

var a = 

var b =a

a.age = 21console.log(b)

//

變數a賦值成物件,物件裡面有age屬性,為20,再將a賦值給b,這個時候a物件裡面的屬性變了,b的屬性也跟著變,這是引用型別的特點

從記憶體上說明值型別和引用型別的區別

值型別:給a分配了乙個空間,空間記憶體了100,這個時候把b賦值成a,這個時候分配b乙個空間,在空間b又存了100這個數字,這個時候空間a和空間b都有各自的空間,然後a的值變成200,b的值還是100,不會互相影響

引用型別:把a賦值成乙個物件,這個物件存在另外乙個地方,a是乙個引用,通過指標指向這個地方,這個時候,把b賦值成a的時候,其實定義了乙個b,這個b指標指向的位置跟a一樣

為什麼引用型別要這麼幹呢?

引用型別有乙個特點,可以無限制的新增屬性,當新增了很多屬性的時候,a就會佔很大的空間,這個時候賦值給b,也像值型別那樣賦值,那麼b也會佔很大的空間,這是不合理的,所以引用型別為了共用空間,採用了引用的方式

同理,陣列和函式也會有這樣的屬性

引用型別和值型別

c 是一種型別安全的語言。每乙個變數都要求定義為乙個特定的型別,並且要求儲存在變數中的值只能是這種型別的值。變數既能儲存值型別,也可以儲存引用型別,還可以是指標。這一課將講述前兩種型別,關於指標的討論我們將在下一課中進行。下面是關於值型別和引用型別不同點的概論 如果乙個變數v儲存的是值型別,則它直接...

引用型別和值型別

c 中值型別和引用型別作為方法引數傳遞的時候其實都可以說是 值 的傳遞,只不過這裡的 值 指代的東西有所區別。當方法的引數為值型別時,方法傳遞的是值本身的值。當方法的引數為引用型別時,方法傳遞的則是應用型別的引用的位址,也就是引用型別位址在棧上的值。舉個引用型別作為引數傳遞的例子 static vo...

值型別和引用型別

為了更好地說明兩種型別之間的區別,借用如下的 來說明 值型別引用型別 記憶體分配地點 分配在棧中 分配在堆中 效率效率高,不需要位址轉換 效率低,需要進行位址轉換 記憶體 使用完後,立即 使用完後,不是立即 等待gc 賦值操作 進行複製,建立乙個同值新物件 只是對原有物件的引用 函式引數與返回值 是...