1. 程式人生 > >Java Integer、Boolean等陷阱

Java Integer、Boolean等陷阱

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;
	}