程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> int與Integer的愛恨情仇,integer愛恨情仇

int與Integer的愛恨情仇,integer愛恨情仇

編輯:JAVA綜合教程

int與Integer的愛恨情仇,integer愛恨情仇


int作為java中元老級的數據類型,可謂無處不在,自從jdk5誕生了Integer,從此不在孤單。

為什麼要設計Integer呢?它與int有什麼區別?

 

一、Integer是int的包裝類型,是引用類型,int是值類型。

   衍生出來的特點就是:

   (1)Integer比較時比較地址,int比較時比較值,Integer與int比較又如何呢?留個疑問,下面再論。

   (2)以對象的屬性存在時,Integer初始默認值為null,int為0;在方法作用域內,變量是要手動進行初始化滴,若只聲明,在後面使用的時候編譯器是通不過的。

 

二、出於數據轉換的考慮

   Integer提供了兩種方法,parseInt和valueOf,看下面:

   String s = "1"

   int a = Integer.parseInt(s)

   Integer b = Integer.valueOf(s)

   Integer c = Integer.valueOf(1)

 

   1)parseInt接收String類型的入參,返回int

   2)valueOf接收String和int類型的入參,返回Integer

   ps:當然,你這樣寫也是成立的:int d = Integer.valueOf(s),編譯器進行了隱式拆箱,將Integer轉化為了int。

 

三、比較

   1、int與Integer

     int a = 1;

     Integer b = 1;

     a==b為true,b先進性拆箱,與a比較的是值

 

   2、 Integer與Integer

      Integer a = new Integer(1)

      Integer b = 1

      Integer c = 1

 

      a==b? false

      解:a存在於內存堆中,b存在於常量池中,地址不同。任何new都會產生新的對象;Integer b = 1進行了隱式的裝箱(調用了valueOf方法)

     

      b==c? true

      解:在內存中,會有一塊叫做常量池的區域,專門存放b和c這種形式定義的對象,初始化時會先去常量池中尋找1,若已經存在,直接指向1,若不存在,生成對象1放入常量池。

 

      再看這個:

      Integer d = 128

      Integer e = 128

      d==e?false

      為什麼這個不適合上面的常量池說法了呢?原因在於常量池指定了數值范圍:-128~127。

      超過了這個范圍,就會生成新的對象。

 

   3、比較兩個Integer的值

      Integer a = new Integer(1)

      Integer b = new Integer(2)

      可以這樣:a.intValue() == b.intValue() 或者 a.equals(b)

 

四、獲取最大值和最小值如此簡單

    int a = Integer.MAX_VALUE; 2^31-1

    int b = Integer.MIN_VALUE; -2^31

 

五、使用場景的限制

    1)很多方法參數就只接收對象類型

    2)泛型只支持對象類型

    3)考慮到數據庫設計中某些數值列可以為null,持久話對象中使用引用類型,可接收null值

   

 

關注老姜談技術,微信號:helojava,或者掃描下面二維碼。

公眾號二維碼
每日一帖,技術雞湯。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved