麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Java > 正文

java方法傳遞引用、傳遞基本類型

2019-11-06 06:04:52
字體:
供稿:網(wǎng)友

今天做項目遇到兩個很有意思的問題,有三個int類型的計數(shù)器,通過一大坨ifelse來分類對計數(shù)器進(jìn)行累加。

由于這坨ifelse太大了,所以我把它extract了一下,refactor到了一個新的PRivate方法中,把計數(shù)器傳到該方法里進(jìn)行更新。然而在方法快要完成的時候突然意識到,java傳遞基本類型只是傳值,方法內(nèi)部改變不了外部的計數(shù)器的值。差點(diǎn)挖了坑,因此創(chuàng)建了一個包裝類:

private class IntWrapper{ public int value; public IntWrapper(int value) { this.value = value; }}

然后傳遞給private方法 IntWrapper 對象,在方法內(nèi)部可以對外部包裝對象計數(shù)器進(jìn)行累加:

intWrapper.value++;

這樣就可以更新外部計數(shù)器的值了。

和C中傳遞指針有些相似。

然后我又抽取了另外的一大坨ifelse生成一個新的方法,需要給該方法傳遞一個BigDecimal類型的對象,然后方法內(nèi)部對該對象進(jìn)行累加更新:

private methodAfterRefactor(BigDecimal amount){ if(xxx){ amount = amount.add(new BigDecimal(567));//1 }}

剛開始沒發(fā)現(xiàn)不對勁,可是仔細(xì)思考了一下,發(fā)現(xiàn)坑了:

java語言中所有參數(shù)都是按值傳遞的,注釋1處的add方法返回了一個新的 BigDecimal 對象,將新對象的地址賦值給方法局部引用變量amount,這一系列操作完全沒有影響到外部 BigDecimal 對象。沒有改變它的域值,也沒有改變它指向的對象(引用變量值)。

思索了一下,我又創(chuàng)建了一個 BigDecimal 的包裹類:

private class BigDecimalWrapper{ public BigDecimal value; public BigDecimalWrapper(){ value= new BigDecimal(0); }}

然后抽取出來的方法變成了這樣:

private methodAfterRefactor(BigDecimalWrapper wrapper){ if(xxx){ wrapper.value = wrapper.value.add(new BigDecimal(567));//1 }}

這樣就能成功地修改到方法外部引用的值了。

這是不是指針的指針有些相似呢…


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 色日本视频 | 久久艹艹艹 | 欧美性猛交xxxxx按摩国内 | jizzyouxxxx| 亚洲午夜在线视频 | 九九热精品视频在线免费观看 | 一级片999 | 成人午夜免费国产 | 成人444kkkk在线观看 | 老子午夜影院 | 欧美性激情视频 | 国产精品99久久久久久宅女 | 羞羞电影在线观看www | 少妇色诱麻豆色哟哟 | 俄罗斯hdxxx| 成人午夜亚洲 | 国产69久久精品成人看 | 国产资源在线观看 | 中文字幕综合在线观看 | 亚洲小视频网站 | 国人精品视频在线观看 | 日韩毛片在线看 | 欧美电影在线观看 | 国产精品久久久久久久久久久久久久久 | 原来神马影院手机版免费 | 狠狠操天天射 | 91精品国产乱码久久久久久久久 | 在线看毛片的网站 | 久久精品99久久久久久2456 | 亚洲小视频在线 | 免费一及片 | 天天撸日日夜夜 | 91av久久| 色婷婷一区二区三区 | 中文字幕四区 | 久久精品一二三区白丝高潮 | 国产一级毛片高清视频 | 四季久久免费一区二区三区四区 | 欧美人与zoxxxx另类9 | 法国极品成人h版 | 55夜色66夜色国产精品视频 |