Java中 int和Integer的區別+包裝類

--今天用Integer 和Integer 比較 發現有問題,因而去查了查。html

 

1.Java 中的數據類型分爲基本數據類型和引用數據類型java

  int是基本數據類型,Integer是引用數據類型;spa

  Ingeter是int的包裝類,int的初值爲0,Ingeter的初值爲null。設計

2.初始化code

  int i =1;htm

  Integer i= new Integer(1);對象

  有了自動裝箱和拆箱,使得對Integer類也可以使用:Integer i= 1;  blog

3.自動裝箱和拆箱內存

  •  從Java5.0版本之後加入了autoboxing功能;
  •  自動「拆箱」和「裝箱」是依靠JDK5的編譯器在編譯期的「預處理工做」。

  3.1 自動裝箱:將基本數據類型封裝爲對象類型,成爲一個對象之後就能夠調用對象所聲明的全部的方法。ci

1 //聲明一個Integer對象
2 Integer num = 10;
3 //以上的聲明就是用到了自動的裝箱:解析爲
4 Integer num = new Integer(10);

  3.2 自動拆箱:將對象從新轉化爲基本數據類型。

1 //裝箱
2 Integer num = 10;
3 //拆箱
4 int num1 = num;

  自動拆箱有個很典型的用法就是在進行運算的時候:由於對象時不恩直接進行運算的,而是要轉化爲基本數據類型後才能進行加減乘除。

Integer num = 10;
//進行計算時隱含的有自動拆箱
System.out.print(num--);

  進階:

//在-128~127 以外的數
Integer num1 = 297;   Integer num2 = 297;           
System.out.println("num1==num2: "+(num1==num2));                    
// 在-128~127 以內的數 
Integer num3 = 97;   Integer num4 = 97;   
System.out.println("num3==num4: "+(num3==num4)); 

  打印的結果是:

    num1==num2: false   

    num3==num4:true 

  很奇怪吧:這就歸結於java對於Integer與int的自動裝箱與拆箱的設計,是一種模式:享元模式(flyweight)

  爲了加大對簡單數字的重利用,java定義:在自動裝箱時對於值從–128到127之間的值,它們被裝箱爲Integer對象後,會存在內存中被重用,始終只存在一個對象

  而若是超過了從–128到127之間的值,被裝箱後的Integer對象並不會被重用,即至關於每次裝箱時都新建一個 Integer對象;

  以上的現象是因爲使用了自動裝箱所引發的,若是你沒有使用自動裝箱,而是跟通常類同樣,用new來進行實例化,就會每次new就都一個新的對象;

  這個的自動裝箱拆箱不只在基本數據類型中有應用,在String類中也有應用,好比咱們常常聲明一個String對象時:

1 String str = "sl";
2 //代替下面的聲明方式
3 String str = new String("sl");

  4.包裝類

  1)概述

  •   全部基本類型都有一個與之對應的類,即包裝類;
  •   包裝類是不可變類;  
  •   包裝類是final的,不能定義他們的子類。

基本數據類型

包裝類

byte

java.lang.Byte

boolean

java.lang.Boolean

short

java.lang.Short

char

java.lang.Character

int

java.lang.Integer

long

java.lang.Long

float

java.lang.Float

double

java.lang.Double

 

 

 

 

 

 

 

 

 

 

 

 

 

  提供包裝類的緣由:

  爲了解決基本類型不能參與面向對象開發的問題。(爲了在各類類型間轉化,經過各類方法的調用。不然,你沒法直接經過變量轉化)。

  好比,如今int要轉爲String
     int a=0;
     String result=Integer.toString(a);
  在java中包裝類,比較多的用途是用在於各類數據類型的轉化中。
  如下是demo(來自落葉補充)

  //經過包裝類來實現轉化的

複製代碼
 1 int num=Integer.valueOf("12");
 2 int num2=Integer.parseInt("12");
 3                 
 4 double num3=Double.valueOf("12.2");
 5 double num4=Double.parseDouble("12.2");
 6 //其餘的相似。經過基本數據類型的包裝來的valueOf和parseXX來實現String轉爲XX
 7                 
 8 String a=String.valueOf("1234");//這裏括號中幾乎能夠是任何類型
 9 String b=String.valueOf(true);
10 String c=new Integer(12).toString();//經過包裝類的toString()也能夠
11 String d=new Double(2.3).toString();
複製代碼

 

 

轉自:http://www.cnblogs.com/hxliang/p/5454184.html

相關文章
相關標籤/搜索