Java学习_int和Integer的区别+包装类
1.Java 中的數(shù)據(jù)類型分為基本數(shù)據(jù)類型和引用數(shù)據(jù)類型
int是基本數(shù)據(jù)類型,Integer是引用數(shù)據(jù)類型;
Ingeter是int的包裝類,int的初值為0,Ingeter的初值為null。
2.初始化
int i =1;
Integer i= new Integer(1);
有了自動裝箱和拆箱,使得對Integer類也可使用:Integer i= 1;
3.自動裝箱和拆箱
- 從Java5.0版本以后加入了autoboxing功能;
- 自動“拆箱”和“裝箱”是依靠JDK5的編譯器在編譯期的“預(yù)處理工作”。
3.1 自動裝箱:將基本數(shù)據(jù)類型封裝為對象類型,成為一個對象以后就可以調(diào)用對象所聲明的所有的方法。
1 //聲明一個Integer對象 2 Integer num = 10; 3 //以上的聲明就是用到了自動的裝箱:解析為 4 Integer num = new Integer(10);3.2?自動拆箱:將對象重新轉(zhuǎn)化為基本數(shù)據(jù)類型。
1 //裝箱 2 Integer num = 10; 3 //拆箱 4 int num1 = num;自動拆箱有個很典型的用法就是在進(jìn)行運算的時候:因為對象時不恩直接進(jìn)行運算的,而是要轉(zhuǎn)化為基本數(shù)據(jù)類型后才能進(jìn)行加減乘除。
Integer num = 10; //進(jìn)行計算時隱含的有自動拆箱 System.out.print(num--);進(jìn)階:
//在-128~127 之外的數(shù) Integer num1 = 297; Integer num2 = 297; System.out.println("num1==num2: "+(num1==num2)); // 在-128~127 之內(nèi)的數(shù) Integer num3 = 97; Integer num4 = 97; System.out.println("num3==num4: "+(num3==num4));打印的結(jié)果是:
num1==num2:?false???
num3==num4:true?
很奇怪吧:這就歸結(jié)于java對于Integer與int的自動裝箱與拆箱的設(shè)計,是一種模式:享元模式(flyweight)
為了加大對簡單數(shù)字的重利用,java定義:在自動裝箱時對于值從–128到127之間的值,它們被裝箱為Integer對象后,會存在內(nèi)存中被重用,始終只存在一個對象
而如果超過了從–128到127之間的值,被裝箱后的Integer對象并不會被重用,即相當(dāng)于每次裝箱時都新建一個 Integer對象;
以上的現(xiàn)象是由于使用了自動裝箱所引起的,如果你沒有使用自動裝箱,而是跟一般類一樣,用new來進(jìn)行實例化,就會每次new就都一個新的對象;
這個的自動裝箱拆箱不僅在基本數(shù)據(jù)類型中有應(yīng)用,在String類中也有應(yīng)用,比如我們經(jīng)常聲明一個String對象時:
1 String str = "sl"; 2 //代替下面的聲明方式 3 String str = new String("sl");4.包裝類
1)概述
- 所有基本類型都有一個與之對應(yīng)的類,即包裝類;
- 包裝類是不可變類;
- 包裝類是final的,不能定義他們的子類。
| 基本數(shù)據(jù)類型 | 包裝類 |
| 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 |
?
?
?
?
?
?
?
?
?
?
?
?
?
提供包裝類的原因:
為了解決基本類型不能參與面向?qū)ο箝_發(fā)的問題。(為了在各種類型間轉(zhuǎn)化,通過各種方法的調(diào)用。否則,你無法直接通過變量轉(zhuǎn)化)。
比如,現(xiàn)在int要轉(zhuǎn)為String
int a=0;
String result=Integer.toString(a);
在java中包裝類,比較多的用途是用在于各種數(shù)據(jù)類型的轉(zhuǎn)化中。
以下是demo(來自落葉補充)
//通過包裝類來實現(xiàn)轉(zhuǎn)化的
來源:https://www.cnblogs.com/hxliang/p/5454184.html
總結(jié)
以上是生活随笔為你收集整理的Java学习_int和Integer的区别+包装类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工行信用卡违约金和透支利息一样吗
- 下一篇: 广发科技先锋基金封闭期多久