為了提供公司的財(cái)務(wù)信息化,公司A上線了一套自主研發(fā)的財(cái)務(wù)系統(tǒng),上班第一天,財(cái)務(wù)C姐就發(fā)現(xiàn)了情況不對(duì):幾項(xiàng)支出都對(duì),但支出總和一直為0,趕緊向大老板報(bào)告。大老板勃然大怒,責(zé)令技術(shù)部門(mén)今天必須解決,小B負(fù)責(zé)了這個(gè)模塊出現(xiàn)了問(wèn)題,被技術(shù)總監(jiān)大罵一通,澤明中午吃飯前必須解決,否則不用吃飯了,可以直接滾蛋了!
小B慌了,失業(yè)的話,下個(gè)月的房租就沒(méi)有著落了,感覺(jué)拉出這段代碼進(jìn)行調(diào)試:
public static void main(String[] args) { BigDecimal cost1=new BigDecimal("1024"
); BigDecimal cost2=new BigDecimal("2048"); BigDecimal cost3=new
BigDecimal("3072"); BigDecimal cost4=new BigDecimal("4096"); BigDecimal total=
BigDecimal.ZERO; total.add(cost1); total.add(cost2); total.add(cost3);
total.add(cost4); System.out.println(total); }
打印結(jié)果為:0
?
是不是沒(méi)創(chuàng)建總額對(duì)象的問(wèn)題?趕緊改改:
public static void main(String[] args) { BigDecimal cost1=new BigDecimal("1024"
); BigDecimal cost2=new BigDecimal("2048"); BigDecimal cost3=new
BigDecimal("3072"); BigDecimal cost4=new BigDecimal("4096"); BigDecimal total=
new BigDecimal("0"); total.add(cost1); total.add(cost2); total.add(cost3);
total.add(cost4); System.out.println(total); }
結(jié)果仍然為:0
考慮到下個(gè)月要不要流落街頭的問(wèn)題,小B趕緊向公司的技術(shù)大神掃地僧請(qǐng)教,在一個(gè)月零食伺候的誘惑下,掃地僧放下手頭的<代碼大全2>,掃了一眼代碼,動(dòng)了動(dòng)手指。
掃地僧:"好了,你運(yùn)行一下吧!"。于是又拿起了<代碼大全2>看了起來(lái)。
小B 趕緊運(yùn)行了一下,計(jì)算結(jié)果正確了,他瞅了瞅代碼,代碼沒(méi)怎么變樣呀?
public static void main(String[] args) { BigDecimal cost1=new BigDecimal("1024"
); BigDecimal cost2=new BigDecimal("2048"); BigDecimal cost3=new
BigDecimal("3072"); BigDecimal cost4=new BigDecimal("4096"); BigDecimal total=
BigDecimal.ZERO; total=total.add(cost1); total=total.add(cost2); total=
total.add(cost3); total=total.add(cost4); System.out.println(total); }
小B暗想:“一個(gè)月的零食呀,太了黑。可是我的程序和掃地僧一樣呀,為什么他的程序能得出正確的結(jié)果?而我的就是0呢?不行,我得問(wèn)出緣由,不能白白浪費(fèi)了一次請(qǐng)教的機(jī)會(huì)!”
于是小B虛心向掃地僧請(qǐng)教,掃地僧看在一個(gè)月零食的面子上,停下來(lái)給菜鳥(niǎo)小B講解。
掃地僧:“記不記的我給你講過(guò),String是不可變的?”
小B:“記得,記得,您老講過(guò),字符String的類(lèi)是final修飾的,不可改變,字符的拼接是產(chǎn)生新的字符而不是改變?cè)瓉?lái)的值?!?br>
掃地僧:“孺子可教也,其實(shí)如BigDecimal,BigInteger,Integer,Long,Short,Byte,Character,Boolean,Float和double的實(shí)例也是不可變的。我們不能修改現(xiàn)有實(shí)例的值,對(duì)這些類(lèi)型的操作將返回新的實(shí)例”。
小B:“那為什么它這樣設(shè)計(jì)呢?不是很容易讓大家犯錯(cuò)了嗎?”
掃地僧:“起先,不可變類(lèi)型看起來(lái)可能很不自然,但
是它們具有很多勝過(guò)與其向?qū)?yīng)的可變類(lèi)型的優(yōu)勢(shì)。不可變類(lèi)型更容易設(shè)計(jì)、實(shí)
現(xiàn)和使用;它們出錯(cuò)的可能性更小,并且更加安全?!?br>
小B:“您老真厲害!”
掃地僧:“你還年輕,悟性也好,慢慢加油吧!”
這次事件起的突然,解決的也比較順利,財(cái)務(wù)系統(tǒng)也運(yùn)行良好了。小B的職位也保住了,為了答謝掃地僧,小B也包圓了掃地僧一個(gè)月的零食,借此機(jī)會(huì),小B也拉近了和掃地僧的距離,從掃地僧身上學(xué)到了很多沒(méi)有掌握的東西。
熱門(mén)工具 換一換
