天天看點

JDK5特性:自動裝箱和自動拆箱,跟我一起看看普通類型與包裝類型之間的轉換吧!JDK5特性:自動裝箱和自動拆箱,跟我一起看看普通類型與包裝類型之間的轉換吧!

JDK5特性:自動裝箱和自動拆箱,跟我一起看看普通類型與包裝類型之間的轉換吧!

寫這篇文章的原因是工作中經常遇到普通類型與包裝類型之間的轉換的問題,以及其他的一些類型轉換,故整理了該篇文章,加深印象。以後遇到類型轉換問題我可以直接寫下來,而不是每次遇到都去百度,進而提高自己的編碼速度。有句話是這麼說的:王者絕非偶然,細節決定成敗!

先認識兩個概念:

  • 裝箱:從普通類型變成引用類型 int–>Ingeter
  • 拆箱:從引用類型變成普通類型 Integer–>int

自動擋拆裝箱與手動擋拆裝箱

我們知道在Java中的容器(ArrayList,HashMap等)是無法存儲基本類型的,隻能存儲引用類型。在JDK5以前都是手動拆裝箱。

  • 手動裝箱:Integer num = Integer.valueOf(666);
  • 手動拆箱:int num2 = num.intValue();

為了高效開發,Java在JDK5以後提供了自動拆裝箱。

  • 自動裝箱:自動将資料從普通類型變成引用類型
  • 自動拆箱:自動将資料從引用類型變成普通類型

包裝類中的享元設計(緩存)(面試題巨坑)

**在包裝類中有一個享元設計(緩存):把常用的數存到常量池中,每次要使用直接從常量去擷取,沒必要重新建立**。
Byte,Short,Integer,Long:在[-128,127],表示同一個對象.
Character:在[0,127]之間共享同一個對象.
           
JDK5特性:自動裝箱和自動拆箱,跟我一起看看普通類型與包裝類型之間的轉換吧!JDK5特性:自動裝箱和自動拆箱,跟我一起看看普通類型與包裝類型之間的轉換吧!
JDK5特性:自動裝箱和自動拆箱,跟我一起看看普通類型與包裝類型之間的轉換吧!JDK5特性:自動裝箱和自動拆箱,跟我一起看看普通類型與包裝類型之間的轉換吧!
JDK5特性:自動裝箱和自動拆箱,跟我一起看看普通類型與包裝類型之間的轉換吧!JDK5特性:自動裝箱和自動拆箱,跟我一起看看普通類型與包裝類型之間的轉換吧!

面試題(北京初級Java)

public class ReadMe {

    public static void main(String[] args) {
        Integer num1 = new Integer(33);
        Integer num2 = new Integer(33);
        System.out.println(num1 == num2);// false
        System.out.println("======================================");

        Integer num3 = Integer.valueOf(36);
        Integer num4 = Integer.valueOf(36);
        System.out.println(num3 == num4);// true
        System.out.println("======================================");

        Integer num5 = 35;
        Integer num6 = 35;
        System.out.println(num5 == num6);// true
        System.out.println("======================================");

        Integer num7 = 250;
        Integer num8 = 250;
        System.out.println(num7.intValue() == num8.intValue());//true
        System.out.println(num7 == num8);// false
        System.out.println("======================================");
    }

}