java中int和Integer的區別?為什么有了int還要有設計Integer?


參考https://blog.csdn.net/chenliguan/article/details/53888018

  https://blog.csdn.net/myme95/article/details/81703216

 

int和Integer的區別:

1. int是基本數據類型,Integer是int的包裝類就是將int類型包裝成Object對象;

2. Integer變量必須實例化后才能使用;int變量不需要;

3. Integer實際是對象的引用,指向此new的Integer對象;int是直接存儲數據值 ;

4. Integer的默認值是null;int的默認值是0。

深入:

  • 兩個通過new生成的Integer變量永遠是不相等的。因為new生成的是兩個對象,其內存地址不同。
  • Integer與new Integer不會相等。因為非new生成的Integer變量指向的是java常量池中的對象,而new Integer()生成的變量指向堆中新建的對象,兩者在內存中的地址不同。
  •  兩個都是非new出來的Integer,如果數在-128到127之間,則是true,否則為false。
    •  java在編譯Integer i = 127的時候,被翻譯成 Integer i = Integer.valueOf(127);  java API中對Integer類型的valueOf的定義如下,對於-128到127之間的數,會進行緩存,Integer i = 127時,會將127這個Integer對象進行緩存,下次再寫Integer j = 127時,就會直接從緩存中取,就不會new了。
  • Integer變量和int變量比較時,只要兩個變量的值是向等的,則結果為true。(因為包裝類Integer和基本數據類型int比較時,java會自動拆箱為int,然后進行比較,實際上就變為兩個int變量的比較)

 

為什么有了int還要有設計Integer?

  對象封裝有很多好處,可以把屬性也就是數據跟處理這些數據的方法結合在一起,比如Integer就有parseInt()等方法來專門處理int型相關的數據。

  另一個非常重要的原因就是在Java中絕大部分方法或類都是用來處理類類型對象的,如ArrayList集合類就只能以類作為他的存儲對象,而這時如果想把一個int型的數據存入list是不可能的,必須把它包裝成類,也就是Integer才能被List所接受。所以Integer的存在是很必要的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM