Java Integer、Boolean等陷阱
阿新 • • 發佈:2019-02-12
Java是面向物件的程式語言,所以除了基本型別外,其他的都是Object。
如果我們想通過 呼叫函式 來改變基本型別(int、float、double...)的值 是行不通的,而通過傳遞物件卻是可以的。
如下程式碼,在triple函式執行完成後並不能改變x的值
public void triple(int x){
x = 3 * x;
}
而對於以下程式碼,卻可以改變,因為傳入的是一個物件的引用
public void changName(Employee e){
e.setName("Java Integer");
}
然而,這裡有一個陷阱,我們都知道Integer是將int進行了封裝,如果使用如下程式碼,則會出現問題
public static void changeInteger(Integer i){
i = new Integer(1);
}
changInteger()函式並不能改變i的值,這是由於:Integer objects are immutable(Integer物件是不可變的)
同樣Boolean等也是如此
如果我們想改變通過呼叫函式來改變int的值則需要使用到IntHolder、BooleanHolder 等,如下:
public static void changeInteger(IntHolder i){
i.value = 1;
}