八种基本类型的包装类你真的懂了?
生活随笔
收集整理的這篇文章主要介紹了
八种基本类型的包装类你真的懂了?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
進來先做個題:
Integer i1 = 10;Integer i2 = 10;Integer i3 = 128;Integer i4 = 128;Integer i5 = 118;Integer i6 = new Integer(10);Float f1 = 10.0f;Float f2 = 10.0f;System.out.println("i1 == i2 ? " + (i1 == i2));System.out.println("i3 == i4 ? " + (i3 == i4));System.out.println("i1 == i6 ? " + (i1 == i6));System.out.println("10 == i6 ? " + (10 == i6));System.out.println("129 == i3 ? " + (128 == i3));System.out.println("i4 == i2 + i5 ? " + (i4 == i2 + i5));System.out.println("128 == i2 + i5 ? " + (128 == i2 + i5));System.out.println("f1 == f2 ? " + (f1 == f2));System.out.println("10.0f == f2 ? " + (10.0f == f2));
答案是多少呢?暫且不談,最后再公布。
基本類型與包裝類的區別:
1.包裝類型可以為null而基本類型不可以。
? 這點在pojo類里面很有用,因為在數據庫里面定義的基本類型字段有可能值為null,
而這時如果將null賦值給基本類型屬性就會報就會拋出 NullPointerException異常。
所以在與數據庫交互的屬性都應該定義為包裝類型,除非明確的知道表中字段為非空字段。
2.包裝類可以用于泛型,而基本類型不可以。
3.包裝類型對象存儲在堆中,基本類型存儲在棧中
包裝類型通過創建對象來存儲數據,而對象是存儲在jvm的堆中的,在棧中存儲對象的引用,也就是對象所在堆中的地址。
基本類型在棧中存儲的就是具體的數據,所以基本類型要比包裝類型更加高效且節省空間。
4.自動裝箱和自動拆箱
把基本類型轉換為包裝類型的的過程叫做裝箱,把包裝類型轉換成基本類型的過程叫做拆箱。在Java SE5之后,java虛擬機會自動完成裝拆箱的操作。
/* 自動裝箱 當數值在-128 ~ 127 之間會調用靜態的valueOf(int i)方法進行裝箱,這是java虛擬機利用常量池技術默認創建了數值[-128,127] 的相應類型的緩存數據,返回的將是數值在常量池中的地址。當數值在這個范圍之外才會去new一個對應類型的包裝類*/
Integer i = 10; // 自動裝箱,虛擬機將會自動轉換成:Integer i = Integer.valueOf(10);Integer i = 128; // 自動裝箱,虛擬機將會自動轉換成:Integer i = new Integer(128);int j = i; // 自動拆箱,虛擬機將會自動轉換成:int j = i.intValue();
包裝類和常量池
Java 基本類型的包裝類中Byte,Short,Integer,Long,Character,Boolean都實現了常量池技術。
- Byte,Short,Integer,Long,包裝類默認創建了數值[-128,127] 的相應類型的緩存數據。
- Character創建了數值在[0,127]范圍的緩存數據。
- Boolean 直接返回True or False。
如果超出對應范圍仍然會去創建新的對象。?
最后
這時候你是否已經知道答案了呢?
Integer i1 = 10;Integer i2 = 10;Integer i3 = 128;Integer i4 = 128;Integer i5 = 118;Integer i6 = new Integer(10);Float f1 = 10.0f;Float f2 = 10.0f;System.out.println("i1 == i2 ? " + (i1 == i2)); // trueSystem.out.println("i3 == i4 ? " + (i3 == i4)); // falseSystem.out.println("i1 == i6 ? " + (i1 == i6)); // falseSystem.out.println("10 == i6 ? " + (10 == i6)); // trueSystem.out.println("129 == i3 ? " + (128 == i3)); // trueSystem.out.println("i4 == i2 + i5 ? " + (i4 == i2 + i5)); // trueSystem.out.println("128 == i2 + i5 ? " + (128 == i2 + i5)); // trueSystem.out.println("f1 == f2 ? " + (f1 == f2)); // falseSystem.out.println("10.0f == f2 ? " + (10.0f == f2)); // true
?
總結
以上是生活随笔為你收集整理的八种基本类型的包装类你真的懂了?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员应该吃透的集合List
- 下一篇: Centos7开机之后连不上网ens33