如果面試官問integer與int的差別:估計大多數人隻會說道兩點,ingeter是int的包裝類,int的初值為0,ingeter的初
值為null。但是如果面試官再問一下integer i = 1;int ii = 1;
i==ii為true還是為false?估計就有一部分人答不出來了,如果再問一下其他的,估計更多的人會頭腦一片混亂。是以我對它們進行了總結,希望對
大家有幫助。
首先看代碼:
首先,17行和18行輸出結果都為true,因為integer和int比都會自動拆箱(jdk1.5以上)。
22行的結果為true,而25行則為false,很多人都不動為什麼。其實java在編譯integer i5 =
127的時候,被翻譯成-> integer i5 =
integer.valueof(127);是以關鍵就是看valueof()函數了。隻要看看valueof()函數的源碼就會明白了。jdk源碼的
valueof函數式這樣的:
看一下源碼大家都會明白,對于-128到127之間的數,會進行緩存,integer i5 = 127時,會将127進行緩存,下次再寫integer i6 = 127時,就會直接從緩存中取,就不會new了。是以22行的結果為true,而25行為false。
對于27行和30行,因為對象不一樣,是以為false。
我對于以上的情況總結如下:
①無論如何,integer與new integer不會相等。不會經曆拆箱過程,i3的引用指向堆,而i4指向專門存放他的記憶體(常量池),他們的記憶體位址不一樣,是以為false
②兩個都是非new出來的integer,如果數在-128到127之間,則是true,否則為false
java在編譯integer i2 = 128的時候,被翻譯成-> integer i2 = integer.valueof(128);而valueof()函數會對-128到127之間的數進行緩存
③兩個都是new出來的,都為false
④int和integer(無論new否)比,都為true,因為會把integer自動拆箱為int再去比
如果大家覺得有什麼不對的地方,歡迎訓示。