在平常要將string類型轉化爲int類型時,直接使用Integer.valueOf()
或者Integer.parseInt()
就可以了,但是看Integer.valueOf()
這個方法
???!!!你這不是直接調用了Integer.parseInt()
嗎?,俄羅斯套娃??
parseInt()
的返回類型是int
valueOf()
的返回類型是Integer
平時都是這樣做的
int i = Integer.valueOf(s);//1
Integer j =10; //2
int b= j;
這樣寫他並不會報錯。那我直接寫parseInt()
豈不香也?valueOf()
多餘之?
其實(1)原本最正確的用法就是該用parseInt()
,因爲parseInt()
的返回類型是int,而之所以可以用valueOf()
,是因爲jdk1.5之後實現自動拆裝箱,使得基本類型可以和其封裝類自由轉換,而自由轉換的的根本就在於valueOf()
和intValue()
這兩個方法。
何爲自動拆裝箱也?
一般的類型我們在定義的時候都需要先new xxxx()
,有八個大佬在我們平時用的時候就沒有,那就是八個基本類型,我們會直接int i = 0;
,但是,java畢竟是對象語言,在集合類中我們其實是無法將int double
直接放進去的,以爲他們不是對象,於是有了基本類型對應的封裝類,常見的就是int - Integer
。
自動裝箱: 就是將基本數據類型自動轉換成對應的封裝類。
自動拆箱:就是將封裝類自動轉換成對應的基本數據類型。
Integer integer=1; //裝箱
int i=integer; //拆箱
//反向編譯之後,他其實是執行了下面的方法
Integer integer=Integer.valueOf(1);
int i=integer.intValue();