天天看點

byte比較_比較Int和Integer的差別!!!

byte比較_比較Int和Integer的差別!!!

Int和Integer

  • 什麼是Int?什麼是Integer?
  • 什麼是包裝類?
  • Int和Integer的相同和不同?
  • Int和Interger值進行比較。

簡述兩點的特點

Int

是一個基礎的資料類型。Java的八大基礎類型(boolean、byte 、short、char、int、float、double、long)。

Integer

是一個是個包裝類,是一個對象,是對象使用的時候就需要引用,需要

new

出來。

什麼是包裝類?

在Java基礎資料類型中,不是對象無法擷取方法,導緻基礎類型無法轉型、反射等過程,為了彌補這個缺陷,Java就使用了包裝類的思想。

包裝類就是将基礎的資料類型分裝的到類中。使基礎類型可以轉化成一個類的方式。

class 
           

Int和Integer的不同

  • 類進行初始化時int類的變量初始為0.而Integer的變量則初始化為null.
  • Integer變量必須執行個體化後才能使用,而int變量不需要 .
  • 在Int是将值直接存儲,Integer對象是生成指針指向此對象。是以 Integer new出來的變量如果判斷是否相等時,肯定是不同的。他兩是對象,比的不是值是記憶體位址

Int和Integer比較

我們通過代碼比較一下Int和Integer的差別

public 
           

Int類型和Int比較++true

對象和Int類型比較++true

new出來的非new出來的比較++false

都屬于非new出來的比較++true

都屬于非new出來的比較++false

  1. 我們發現Integer變量和int變量比較時,隻要兩個變量的值是向等的,則結果為true。 因為包裝類Integer和基本資料類型int比較時,java會自動拆包裝為int,然後進行比較,實際上就變為兩個int變量的比較。
  2. 非new生成的Integer變量和new Integer()生成的變量比較時,結果為false。 因為 Integer當變量值在-128~127之間時,非new生成的Integer變量指向的是java常量池中的對象,而new Integer()生成的變量指向堆中建立的對象,兩者在記憶體中的位址不同;
  3. 而兩個new出來的Interger比較時是不可能相等的,他們兩是對象。。。
如果有錯誤的地方,還請指正。

補充:

這裡就是一個坑

,面試題經常會考這個問題

//第一種情況當i的值處于(-128,127)之間,直接傳回Integer緩存數組中相應對象的引用
           

什麼意思呢,就是同樣一個值,都是new出來的數,如果大于127或小于-128,它建立出來執行個體會重新整理在棧裡面的指針,兩個值就不等了,下圖中比較的已經不是值了,是在棧中的指針,因為不是同一個對象是以指針也不會相同.

//這時候兩個對象就不相等了,因為他們已經不是同一個對象了
           

Integer new和不new有啥差別?*

給類new一個對象,new出來的是執行個體對象.

沒有new就建立的對象是類對象

沒new的對象 隻能通路該類中的靜态方法或靜态成員變量

繼續閱讀