我之前就在學(xué)習(xí)Python,而Python自己也說了自己是一門純粹的面向?qū)ο笳Z言.包括int類型都是對(duì)象.
所謂面向?qū)ο缶褪且妙愋?然而今天看了一篇有關(guān)Swift的有關(guān)struct還是使用class的文章,讓我覺得認(rèn)知上需要小心又謹(jǐn)慎.
文章中這么寫到的:
大部分語言沒有類似 struct 結(jié)構(gòu)體的東西罪针。像 Python 和 JavaScript 這樣“一切皆對(duì)象”的語言都只有引用類型蚀腿。如果你是從這樣的語言轉(zhuǎn)到 Swift赋除,值類型這個(gè)概念可能對(duì)你來說更加陌生。
不過等一下齿诉!有一個(gè)地方幾乎所有的語言都會(huì)使用值類型:數(shù)值(number)!
然后我迫不及待的就在VSCode中寫下了如下的簡單代碼
x1 = 1
x2 = x1
x1 = x1 + 1
print("x1:{}".format(x1))
print("x2:{}".format(x2))
按照面向?qū)ο蠖际且脤?duì)象邏輯,x1和x2是指向同一個(gè)指針,那么x1 + 的變化必然也會(huì)影響到x2
根據(jù)這個(gè)理論,預(yù)期的打印結(jié)果應(yīng)該是:
x1:2
x2:2
然而實(shí)際的結(jié)果是:
x1:2
x2:1
最后文章是這么解釋的:
由于許多語言的核心是“一切皆對(duì)象”,number 其實(shí)是用引用類型來實(shí)現(xiàn)的嗅钻。然而皂冰,它們是不可變引用類型,不可變引用類型和值類型的差異是很難察覺的养篓。它們的行為和值類型一樣灼擂,即使它們不是以這種方式實(shí)現(xiàn)。