Java本身都是值傳遞式的調用,對於物件傳遞的是位址值。將位址值重新賦值等於重新指向,不會影響外層。
而且這裡Integer物件也有特殊性。其實實作上可能類似
class Integer{ final int value; //一旦赋值,就不能改变。 }
這就出現:呼叫時傳的位址值不能改變外層+物件本身又不能改變。導致這個值沒法改變
解很多
1、java風格就是,單一值用回傳值。 return i; 外面再i=foo();賦值;多個值用數組或物件。
2、傳遞自己的封裝類別。 class MutableInteger{ int value;}
3、傳遞專用AtomicInteger原子整數物件
public static void main(String[] 参数) { AtomicInteger i=new AtomicInteger(40); i.intValue(); System.out.println(i); } public static void change(AtomicInteger i) { i.set(55); }
也可以實現傳遞後改值,
推薦方案1,盡量避免
更多淺析javajava中Integer參照方式的問題相關文章請關注PHP中文網!