1. 程式人生 > >new Integer()與Integer.valueOf()的區別

new Integer()與Integer.valueOf()的區別

@[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型別的變數,儲存地址。