Java不可變型別的詳解
在Java語言中都有哪些不可變型別呢?下面小編為大家介紹了Java不可變型別,希望能幫到大家!
我們先看下面一個例子:
複製程式碼 程式碼如下:
import nteger;
public class BigProblem {
public static void main(String[ ] args) {
BigInteger fiveThousand = new BigInteger("5000");
BigInteger fiftyThousand = new BigInteger("50000");
BigInteger fiveHundredThousand = new BigInteger("500000");
BigInteger total = ;
(fiveThousand);
(fiftyThousand);
(fiveHundredThousand);
tln(total);
}
}
你可能會認為這個程式會打印出555000。畢竟,它將total設定為用BigInteger表示的0,然後將5,000、50,000和500,000加到了這個變數上。如果你執行該程式,你就會發現它列印的不是555000,而是0。很明顯,所有這些加法對total沒有產生任何影響。
對此有一個很好理由可以解釋:BigInteger例項是不可變的。String、BigDecimal以及包裝器型別:Integer、Long、Short、Byte、Character、Boolean、Float和Double也是如此,你不能修改它們的'值。我們不能修改現有例項的值,對這些型別的操作將返回新的例項。起先,不可變型別看起來可能很不自然,但是它們具有很多勝過與其向對應的可變型別的優勢。不可變型別更容易設計、實現和使用;它們出錯的可能性更小,並且更加安全[EJ Item 13]。
為了在一個包含對不可變物件引用的變數上執行計算,我們需要將計算的結果賦值給該變數。這樣做就會產生下面的程式,它將打印出我們所期望的555000:
複製程式碼 程式碼如下:
import nteger;
public class BigProblem {
public static void main(String[] args) {
BigInteger fiveThousand = new BigInteger("5000");
BigInteger fiftyThousand = new BigInteger("50000");
BigInteger fiveHundredThousand = new BigInteger("500000");
BigInteger total = ;
total = (fiveThousand);
total = (fiftyThousand);
total = (fiveHundredThousand);
tln(total);
}
}