<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Java 自動裝箱和拆箱 > 原文: [https://beginnersbook.com/2014/09/java-autoboxing-and-unboxing-with-examples/](https://beginnersbook.com/2014/09/java-autoboxing-and-unboxing-with-examples/) Java 1.5 引入了一種特殊功能,即將原始類型自動轉換為相應的包裝器類,反之亦然。 **自動裝箱** :將原始類型自動轉換為相應包裝類的對象稱為自動裝箱。例如 - 將`int`轉換為`Integer`,將`long`轉換為`Long`,將`double`轉換為`Double`等。 **拆箱**:這只是自動裝箱的逆過程。自動將包裝類的對象轉換為其對應的原始類型類型稱為拆箱。例如 - 將`Integer`轉換為`int`,`Long`轉換為`long`,將`Double`轉換為`double`等。 ```java Primitive type Wrapper class boolean Boolean byte Byte char Character float Float int Integer long Long short Short double Double ``` ## Java 中什么時候發生自動裝箱和拆箱 #### 自動裝箱 讓我們看一些帶有示例的案例,其中發生了自動裝箱。 **案例 1** :當一個方法期望一個包裝器類對象但是作為參數傳遞的值是一個基本類型。例如,在下面的代碼中,方法`myMethod()`期望一個`Integer`包裝類的對象,但是我們傳遞了一個原始的`int`類型。程序運行正常,因為編譯器執行自動裝箱(將`int`轉換為`Integer`) ```java class AutoboxingExample1 { public static void myMethod(Integer num){ System.out.println(num); } public static void main(String[] args) { /* passed int (primitive type), it would be * converted to Integer object at Runtime */ myMethod(2); } } ``` 輸出: ```java 2 ``` **案例 2** :在某個時間點,您將原始類型值分配給其包裝類的對象。例如:以下語句有效,因為編譯器在運行時執行自動裝箱。 ```java Integer inum = 3; //Assigning int to Integer: Autoboxing Long lnum = 32L; //Assigning long to Long: Autoboxing ``` **案例 3** :處理集合框架類時: ```java ArrayList<Integer> arrayList = new ArrayList<Integer>(); arrayList.add(11); //Autoboxing - int primitive to Integer arrayList.add(22); //Autoboxing ``` 這里`ArrayList`類需要一個`Integer`包裝類對象,但是我們提供了`int`原始類型。 #### 拆箱 **案例 1** :方法期待`Integer`對象(參數)但我們提供了`int`。發生了將`Integer`轉換為`int`的自動轉換(拆箱)。 ```java class UnboxingExample1 { public static void myMethod(int num){ System.out.println(num); } public static void main(String[] args) { Integer inum = new Integer(100); /* passed Integer wrapper class object, it * would be converted to int primitive type * at Runtime */ myMethod(inum); } } ``` 輸出: ```java 100 ``` **案例 2** :作業 ```java Integer inum = new Integer(5); int num = inum; //unboxing object to primitive conversion ``` **案例 3** :在處理集合類時: ```java ArrayList arrayList = new ArrayList() int num = arrayList.get(0); // unboxing because get method returns an Integer object ``` ## 幕后發生了什么? 在上一節中,我們學習了 java 編譯器如何在基本類型和相應的包裝器對象之間執行自動轉換。讓我們討論一下編譯器在自動裝箱和拆箱過程中實際做了什么。理解這一點的最好方法是比較 java 1.5 之前和 java 1.5 之后的事情(java 1.5 中引入的裝箱和拆箱)。 **自動裝箱** : 我們看到了什么: ```java Integer number = 100; ``` 編譯器做了什么(或者我們以前在 java 1.5 之前做過的事情): ```java Integer number = Integer.valueOf(100); ``` **拆箱**: 我們看到了什么: ```java Integer num2 = new Integer(50); int inum = num2; ``` 編譯器做什么: ```java Integer num2 = new Integer(50); int inum = num2.intValue(); ``` 類似的事情發生在其他包裝類和原始類型,如`long`,`double`,`short`等。 #### 你應該注意的事情很少: 在進行比較時不要混合原始類型和對象。對于這樣的比較,您可能會得到不可預測的結果。更好的做法是:將對象與對象進行比較(使用`equals()`方法)并將原始類型與原始類型進行比較(使用邏輯運算符,如`==`,`<`等)。 #### 參考 [Javadoc - Autoboxing 和 Unboxing](https://docs.oracle.com/javase/tutorial/java/data/autoboxing.html)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看