new Integer()與Integer.valueOf()的區別
阿新 • • 發佈:2018-11-23
@[TOC](new Integer()與Integer.valueOf()的區別)
new Interger()
//Interger引用型別變數a中儲存在堆中開闢的空間的地址,地址中儲存100
Integer a=new Integer(100);
Interger.valueOf
//直接呼叫Interger的屬性valueOf,將int型別的10,隱式加包為Interger型別的10
//再將轉化後的10儲存在Interger引用型別變數a中
Integer a=Integer.valueOf(10);
兩者的區別
Integer a=new Integer(100); Integer b=new Integer(100); Integer c=Integer.valueOf(100); Integer d=Integer.valueOf(100); System.out.println(a==b); //false System.out.println(c==d); //ture
a,b只是儲存了一個地址,100在堆中的儲存地址,因此a,b進行比較輸出結果肯定為false。
c,d中儲存的是通過Interger.valueOf隱式加包後的100,c,d中儲存的型別相同值也相同兩者進行比較輸出結果肯定為ture。
Interger型別中的valueOf類的原始碼
該程式碼表示valueOf的隱士加包是有範圍的只能加包-128~127,超過這個範圍將用new Interger的方法。因此將程式碼中的100改為1000,兩個輸出將都是false,而且所用的方法也一樣都是在堆中呼叫一個地址用來儲存值,Interger型別的變數,儲存地址。