1. 程式人生 > >const定義的物件屬性是否可以改變

const定義的物件屬性是否可以改變

const 指標指向的地址不可以變化,指向地址的內容可以變化。


在作業盒子面試的時候問到了一個問題,const定義的物件屬性是否可以改變。當時沒有考慮就回答了不可以,面試官微笑著回答說錯了。回來後查看了一下const的定義,明白了其中的原理。

    const是用來定義常量的,而且定義的時候必須初始化,且定義後不可以修改。對於基本型別的資料來說,自然很好理解了,例如 const PI = 3.14。如果定義的時候不初始化值的話就會報錯,錯誤內容就是沒有初始化。具體的錯誤資訊如下圖:

如果我們修改const定義的常量也是會出現錯誤的,提示的錯誤如下圖:


可見,const定義的基本資料型別的變數確實不能修改,那引用資料型別呢?

先看一個演示:


P物件的name屬性確實被修改了,怎麼理解這個現象呢?

因為物件是引用型別的,P中儲存的僅是物件的指標,這就意味著,const僅保證指標不發生改變,修改物件的屬性不會改變物件的指標,所以是被允許的。也就是說const定義的引用型別只要指標不發生改變,其他的不論如何改變都是允許的。

我們試著修改一下指標,讓P指向一個新物件,結果如下圖:


即使物件的內容沒發生改變,指標改變也是不允許的。