閱讀材料一:靜態(tài)檢查>7.可變值對比重賦值變量

Reading 1: Static Checking > Mutating Values Vs. Reassigning Variables

原文地址:https://courses.edx.org/courses/course-v1:MITx+6.005.1x+3T2016/courseware/Readings_Videos/01-Static-Checking/

可變值對比重賦值變量

畫下運行時發(fā)生事情的圖片對我們明白一些潛在問題來說很有幫助.快照圖代表了一個程序運行時的狀態(tài).

圖表1

用其最簡單的形式,一個快照圖顯示一個變量以及用一個剪頭指向其值.一個值可能是一個基本變量比如說int,可以簡單地寫一個數(shù)字,又或者是一個對象例如String或者ArrayList,這用一個圓包裹著它的類型.一個對象的值往往有其內(nèi)在的變量以及箭頭指向其值.例如,在冰雹序列代碼的某個從n=3開始的地方,一個快照圖可能如上圖所示.

盡管這門課圖片的例子運用Java,這個標(biāo)記可以用到其他任何現(xiàn)代的語言,例如Python,C++,Ruby.

快照圖給了我們一個直觀的方式去可視化改變變量和改變值的區(qū)別:

- 當(dāng)你給一個變量賦值時,你在改變變量剪頭的指向.你可以使它指向一個不同的值.

intn =3;n = 3*n + 1;n = n/2;


圖表2

- 當(dāng)我們改變一個可變值的內(nèi)容時--比如一個集合或者一個列表--你在改變一個值的內(nèi)在引用.這稱為改變值.

Listlist=newArrayList();list.add(3);list.add(5);list.set(0, 9);


圖表3

重賦值和不可變值

例如,我們有一個String類型的變量s,我們可以把它的值從'a'重賦值為'ab'.

String s ="a";
s = s +"b";


圖表4

String是一個不可變類型的例子,一個類型其值至創(chuàng)造后再也不能改變.不可變性是本門課的一個主要的設(shè)計原則.我們將在閱讀材料中更多的談到這一點.

不可變對象(它們設(shè)計者的目的是用它們代表相同的值)在快照圖中用兩個邊界表示,類似我們圖表中的String類型.

可變的值

相反,StringBuilder(另一個Java自帶的類型)是一個可變的對象代表了一串對象.它有方法去改變它的值.

StringBuilder sb =newStringBuilder("a");

sb.append("b");


圖表5

這兩個快照圖看起來很不一樣,哪一個是好的:可變和不可變的差別在使代碼遠(yuǎn)離bug的過程中扮演了重要的角色.

不可變引用

Java還給了我們不可變的引用:變量賦值了一次就不用再賦值了.為了引用不可變,用final關(guān)鍵詞聲明它:finalintn =5;

如果你的Java編譯器不確定你的final變量將在運行時只賦值一次,它將產(chǎn)生一個編譯錯誤.因此final給你了一個靜態(tài)的不可變引用的檢測.

在快照圖中,一個不可變的引用將用雙線的箭頭.


圖表6

注意到我們可以有一個不可變的引用引用到一個可變的值.例如:final StringBuilder sb;這意味著這個StringBuilder的值可以改變,但是sb的箭頭不會改變;它永遠(yuǎn)指向同一個StringBuilder對象.

我們可以永遠(yuǎn)有一個可變的引用到一個不可變的值.比如String s,s變量的值可以改變因為它可以重指向不同的對象.

在聲明一個方法的參數(shù)和盡可能多的本地變量時,用final是一個很好的實踐.類似變量的類型,這些聲明是非常重要的文檔,對讀代碼很有用以及編譯器可以靜態(tài)檢測.

這里有我們的冰雹序列的兩個變量:我們可以將它們聲明為final嗎?


圖表7
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子潜沦,更是在濱河造成了極大的恐慌哗总,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疾层,死亡現(xiàn)場離奇詭異挑围,居然都是意外死亡矢渊,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進(jìn)店門北苟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來奏夫,“玉大人怕篷,你說我怎么就攤上這事⌒镏纾” “怎么了廊谓?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長麻削。 經(jīng)常有香客問我蒸痹,道長春弥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任电抚,我火速辦了婚禮惕稻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蝙叛。我一直安慰自己俺祠,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布借帘。 她就那樣靜靜地躺著蜘渣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪肺然。 梳的紋絲不亂的頭發(fā)上蔫缸,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天,我揣著相機(jī)與錄音际起,去河邊找鬼拾碌。 笑死,一個胖子當(dāng)著我的面吹牛街望,可吹牛的內(nèi)容都是我干的校翔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼灾前,長吁一口氣:“原來是場噩夢啊……” “哼防症!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起哎甲,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤蔫敲,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后炭玫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體奈嘿,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年础嫡,在試婚紗的時候發(fā)現(xiàn)自己被綠了指么。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡榴鼎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出晚唇,到底是詐尸還是另有隱情巫财,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布哩陕,位于F島的核電站平项,受9級特大地震影響赫舒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜闽瓢,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一接癌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧扣讼,春花似錦缺猛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至销钝,卻和暖如春有咨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蒸健。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工座享, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人似忧。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓渣叛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親橡娄。 傳聞我的和親對象是個殘疾皇子诗箍,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法挽唉,內(nèi)部類的語法滤祖,繼承相關(guān)的語法,異常的語法瓶籽,線程的語...
    子非魚_t_閱讀 31,625評論 18 399
  • java筆記第一天 == 和 equals ==比較的比較的是兩個變量的值是否相等匠童,對于引用型變量表示的是兩個變量...
    jmychou閱讀 1,497評論 0 3
  • 相關(guān)概念 面向?qū)ο蟮娜齻€特征 封裝,繼承,多態(tài).這個應(yīng)該是人人皆知.有時候也會加上抽象. 多態(tài)的好處 允許不同類對...
    東經(jīng)315度閱讀 1,940評論 0 8
  • 她接過姐姐遞給她的婚禮邀請函時汤求,心酸大于欣喜。雖然是姐姐的好事將近严拒,但畢竟那個男人扬绪,她自己曾愛了四年。 其實何止是...
    然后十七閱讀 557評論 0 2
  • 不知道其他的行業(yè)剛?cè)肼毜那闆r如何裤唠,反正護(hù)膚行業(yè)在入職時的資料挤牛,會讓人看到就頭大,因為資料太多种蘸。從基礎(chǔ)的產(chǎn)品品名到產(chǎn)...
    九悠閱讀 162評論 0 2