既然是乙個小程式引發的思考,那麼我們就先看看這個小程式,看看他有何神奇之處:
,i=",s.val,i);
mymethod(s, i);
console.writeline("s.val=,i=", s.val, i);
console.read();
}static
void mymethod(myclass f1,int f2)
}class myclass
}呵呵,大家看了以後可能會感覺這不是很簡單的**嗎?有什麼特別的地方嗎?沒有,真沒有!但是我想問下大家這兩次輸出結果會有什麼不同嗎?分別是什麼?有沒有得出兩次結果都是一樣的?這個程式輸出的結果是:
可能有些童鞋可能會問,不應該是一樣的嗎?為什麼乙個值變了,另外乙個沒有變呢?這是為什麼呢?仔細的同學可能會發現static void mymethod(myclass f1,int f2)這個方法兩個引數的型別不一樣,f1屬於引用型別,f2屬於型別,是不是因為這個原因才導致兩個變數經過同樣的處理,s.val的值改變了,i的值卻沒有變。首先我們了解下什麼是值型別,什麼是引用型別。
值型別:值型別只需要一段單獨的記憶體,用於儲存實際的資料,他存在棧裡面
引用型別:引用型別需要兩段記憶體。
那這樣說,像上面s物件,它是乙個引用型別,那它應該存放在堆中,但是val又是個值型別,那它不是應該存放在棧中嗎?
請記住,對於乙個引用型別,其實例部分始終存放在堆裡。既然val是物件s的一部分,那麼它們都會被存放在堆裡,無論它們是值型別還是引用型別。
棧:棧是乙個記憶體陣列,是乙個lifo(last-in first- out,後進先出)的資料結構,棧儲存幾種型別的資料。
親愛的童鞋們,你們明白了嗎?別看一點小程式,原來深挖可以得出那麼多資訊。其實也側面說明了基礎的重要性,童鞋們加油吧!
乙個事故引發的思考
今天線上服務出現了乙個事故,思考下這個事故,覺得有好幾個地方需要思考。1 對於前端而言,回滾的功能是必須的。前端介面出現了問題,第乙個應該想到的是將 回滾到乙個穩定版本。2 快取和資料庫的使用,需要注意乙個問題,當快取失效的時候,可能會有大併發的請求去訪問資料庫,這個時候資料庫會不會崩潰?如果這個時...
乙個案例引發的思考
今天下午,團隊開了乙個簡短的版本總結會。會上測試經理分析了乙個案例 某子程式在轉測試後發現不能被平台排程,原因是子程式的排程入口跟不符合平台規範。很明顯開發在轉測試前沒有充分自驗證,測試經理提出,後續對跟平台對接的子程式轉測試必須要有將子程式接入平台跑通後的驗證報告和相關checklist,否則不予...
因乙個delete引發的思考
請看這樣一段 class test test volatile int m value int main int argc,char ar 請問這段 如何輸出?可能會有人回答崩了呀,然而實驗多次,程式依舊堅挺,輸出也正確,為啥呢?我們最主要的問題就在於delete到底做了什麼,釋放記憶體導致是怎麼釋...