java的值傳遞和引用傳遞

大家好我是白澤。

這篇打算講講java開發(fā)中新人要知道的一些事情吧

對象引用和值引用剿吻,這個(gè)是在基礎(chǔ)不過的知識(shí)了窍箍,但好多人特別是小白經(jīng)常會(huì)忽略這問題,lz當(dāng)初也是丽旅。如果你是大乓可以當(dāng)看看或者直接跳過唄。

提到這個(gè)概念我們先來大概了解下java中堆棧的東西榄笙,老話再談邪狞,“棧”是存放java對象中的基本組成數(shù)據(jù)也就是所謂的基本數(shù)據(jù)類型和對象的引用茅撞,棧里的東西執(zhí)行時(shí)都是單線程帆卓,你也可以理解為當(dāng)有線程訪問棧里的東西時(shí)棧都會(huì)克隆出一份新的讓新線程操作,所以棧里的東西一般不存在線程安全問題米丘。而“堆”存放就就是對象的信息棧中的引用會(huì)指向堆中這塊對應(yīng)的內(nèi)存剑令,在堆里一個(gè)對象只有一塊內(nèi)存,但可以被棧中多個(gè)引用地址引用拄查,這就會(huì)出現(xiàn)一個(gè)應(yīng)用改了這個(gè)對象其他引用取到的值也會(huì)相應(yīng)的變化吁津,這就會(huì)存在線程安全問題。當(dāng)然線程這東西比較不好理解堕扶,這篇博客也不是和大家講線程的所以大家只要知道棧中的數(shù)據(jù)一般不存在線程安全問題碍脏,而堆中的數(shù)據(jù)就會(huì)有線程安全問題暫時(shí)就夠了。

今天我們要講的是我們平常開發(fā)必不可少的操作“傳參”稍算,傳參就是往一個(gè)方法中傳遞參數(shù)潮酒,那這個(gè)又有什么好注意的呢?讓lz一一道來邪蛔,首先參數(shù)部分會(huì)有基本數(shù)據(jù)類型和對象引用構(gòu)成那這個(gè)基礎(chǔ)數(shù)據(jù)類型就是我們今天要講的值傳遞扎狱,而對象引用就是對象的引用傳遞。大家也可以暴力一點(diǎn)記成在java中的參數(shù)里基礎(chǔ)數(shù)據(jù)類型的參數(shù)就是值傳遞匠抗,對象就是一個(gè)引用傳遞污抬。在這里新人要注意的是傳進(jìn)來的的參數(shù)如果是值引用可以隨便的修改绳军,因?yàn)樯厦嬲f過它是存放在棧中是線程安全的门驾,每次訪問都會(huì)復(fù)制出一份出來所以相互之間不會(huì)影響奶是。而引用傳遞就不是這樣竣灌。首先需要注意的是,如果傳進(jìn)來的對象有這么個(gè)需求“你想用別人寫的對象然后將它的引用作為方法參數(shù)傳進(jìn)來”那么這個(gè)對象在你的方法中切記千萬不要直接的修改該類的數(shù)據(jù)和狀態(tài)及汉。因?yàn)榭赡苤皇悄阆胍@個(gè)對象的數(shù)據(jù)變化而寫這個(gè)對象的同事或者其他使用這個(gè)對象的同事并不希望這對象的值有變化坷随,這時(shí)你要是直接修改的話那就會(huì)出現(xiàn)后期可能連你自己都不知道的bug而且這種bug不容易找出來漫贞。為什么會(huì)出現(xiàn)這種情況呢?上面提到過芍殖,對象是放在堆中的如果你使用的時(shí)候不是重新new出來一個(gè)那么你使用的引用也是指向和別人使用的同一塊內(nèi)存谴蔑,這樣你改了別人當(dāng)然也會(huì)有變化。這其實(shí)也算是一種線程安全的表現(xiàn)吧窃躲。

那么如何避免這種bug呢钦睡?首先如果你只是想用這個(gè)對象而不是對象里的別人的數(shù)據(jù),那你只要自己new出來然后自己賦值初始化再傳進(jìn)去就可以洒琢。因?yàn)槭褂胣ew關(guān)鍵字創(chuàng)建的對象會(huì)在堆內(nèi)存中分配一個(gè)新的內(nèi)存給你這個(gè)對象褐桌,同樣在棧中也會(huì)生成一個(gè)新的引用給你。那要是想用別人的數(shù)據(jù)呢呛踊?這就要使用克隆的方法去把該對象克隆出來再使用或者自己提供一個(gè)該對象的克隆方法即:new出一個(gè)新對象之后再把另一個(gè)對象的數(shù)據(jù)set進(jìn)去再使用就好。另外比較快捷的方式就是實(shí)現(xiàn)java提供的Cloneable接口重寫它的clone方法再使用谭网,但這個(gè)方法只是淺復(fù)制,也就是說它只會(huì)復(fù)制對象里存在棧里邊的數(shù)據(jù)也就是基本數(shù)據(jù)類型的數(shù)據(jù)骄崩,而如果這個(gè)對象有其他對象的引用那么如果你修改那個(gè)被引用的對象還是會(huì)被修改掉薄辅,除非你再使用這個(gè)方法再給那個(gè)對象進(jìn)行克隆站楚。但是這種方式是不是聽著就感覺很low?窿春,別急,試試下一種蔚润。就是實(shí)現(xiàn)java提供的Serializable序列化接口再使用io對其進(jìn)行序列化嫡纠,再反序列化回來的對象就是一個(gè)全新的對象延赌,也就是說在堆中有自己的內(nèi)存地址,對其修改不會(huì)影響別人的對象的數(shù)據(jù)挫以。

下面看一個(gè)內(nèi)存圖掐松,其中有兩個(gè)對象引用同時(shí)指向同一個(gè)對象,而此時(shí)一個(gè)修改數(shù)據(jù)泻仙,一個(gè)獲取數(shù)據(jù)但是操作的都是同一個(gè)對象的數(shù)據(jù)這樣就會(huì)參生數(shù)據(jù)錯(cuò)亂的額情況

好了量没,第一遍入行博客就寫到這了殴蹄,以后講講在工作中的經(jīng)驗(yàn)和積累,大家有興趣可以關(guān)注微信公眾號 baize1935 獲取更過文章刺下。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末稽荧,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子畅卓,更是在濱河造成了極大的恐慌翁潘,老刑警劉巖歼争,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沐绒,死亡現(xiàn)場離奇詭異,居然都是意外死亡乔遮,警方通過查閱死者的電腦和手機(jī)申眼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來巷蚪,“玉大人濒翻,你說我怎么就攤上這事有送。” “怎么了雀摘?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長涯塔。 經(jīng)常有香客問我,道長匕荸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任诺凡,我火速辦了婚禮腹泌,結(jié)果婚禮上童本,老公的妹妹穿的比我還像新娘。我一直安慰自己绑蔫,他們只是感情好配深,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布嫁盲。 她就那樣靜靜地躺著,像睡著了一般缸托。 火紅的嫁衣襯著肌膚如雪俐镐。 梳的紋絲不亂的頭發(fā)上哺哼,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天取董,我揣著相機(jī)與錄音,去河邊找鬼枢里。 笑死坡垫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的冰悠。 我是一名探鬼主播溉卓,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼桑寨,長吁一口氣:“原來是場噩夢啊……” “哼忿檩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起沙咏,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤班套,失蹤者是張志新(化名)和其女友劉穎吱韭,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體痘煤,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡衷快,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年烦磁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了都伪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片积担。...
    茶點(diǎn)故事閱讀 39,834評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡先誉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出诈闺,到底是詐尸還是另有隱情铃芦,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站咧虎,受9級特大地震影響砰诵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鳍鸵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一偿乖、第九天 我趴在偏房一處隱蔽的房頂上張望哲嘲。 院中可真熱鬧眠副,春花似錦、人聲如沸霍弹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至台丛,卻和暖如春耍缴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工防嗡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留变汪,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓蚁趁,卻偏偏與公主長得像裙盾,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子他嫡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評論 2 354

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