java編程中容易犯錯的地方之BigInteger – JAVA編程語言程序開發技術文章

在java中,有很多容易被忽視的地方,今天在網上看到一個java的謎題,代碼如下:
 
[java] 
BigInteger five  = new BigInteger("5"); 
BigInteger four = new BigInteger("4"); 
BigInteger total = BigInteger.ZERO; 
total.add(five); 
total.add(four);   
 
System.out.println(total); 
 
乍一看,覺得這個代碼應該輸出9,畢竟4+5=9嘛。其實,如果你運行一下這段代碼(這段代碼不能直接運行,你得需要修改一下),會驚奇的發現,這段代碼居然打印出瞭0。
 
分析:
不可變類型種類:String、BigDecimal、BigInteger和各種包裝器類型都是不可變類型。
對於String不可變的特性在我另一篇博文中說到。
比如BigInteger的add方法,並不會改變兩個操作數即現有實例,而是返回新的實例。
 
結論:
在調用不可變對象的方法時,如果對於看起來是對對象進行改變的方法,則現有實例並不會改變,而是返回一個新的實例。

發佈留言