日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【转】java 自动装箱与拆箱

發布時間:2024/4/17 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】java 自动装箱与拆箱 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

java 自動裝箱與拆箱

這個是jdk1.5以后才引入的新的內容,作為秉承發表是最好的記憶,毅然決定還是用一篇博客來代替我的記憶:

java語言規范中說道:在許多情況下包裝與解包裝是由編譯器自行完成的(在這種情況下包裝成為裝箱,解包裝稱為拆箱);

其實按照我自己的理解自動裝箱就可以簡單的理解為將基本數據類型封裝為對象類型,來符合java的面向對象;例如用int來舉例:

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

以上就是一個很好的體現,因為10是屬于基本數據類型的,原則上它是不能直接賦值給一個對象Integer的,但jdk1.5后你就可以進行這樣的聲明,這就是自動裝箱的魅力
自動將基本數據類型轉化為對應的封裝類型。成為一個對象以后就可以調用對象所聲明的所有的方法

自動拆箱:故名思議就是將對象重新轉化為基本數據類型:

//裝箱 Integer num = 10; //拆箱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對象時:

String str = "sl"; //代替下面的聲明方式 String str = new String("sl");
來源:?<http://www.cnblogs.com/shenliang123/archive/2012/04/16/2451996.html>?

來自為知筆記(Wiz)

轉載于:https://www.cnblogs.com/ssslinppp/p/4651368.html

總結

以上是生活随笔為你收集整理的【转】java 自动装箱与拆箱的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。