在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方法,並不會改變兩個操作數即現有實例,而是返回新的實例。
結論:
在調用不可變對象的方法時,如果對於看起來是對對象進行改變的方法,則現有實例並不會改變,而是返回一個新的實例。