亚洲 国产精品 日韩-亚洲 激情-亚洲 欧美 91-亚洲 欧美 成人日韩-青青青草视频在线观看-青青青草影院

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > Java支持的數據類型有哪些?什么是自動拆裝箱?

Java支持的數據類型有哪些?什么是自動拆裝箱?

來源:千鋒教育
發布人:qyf
時間: 2022-06-07 11:44:00 1654573440

java1

  這個題目需要咱們知道點字節碼,因為大家都知道,很簡單的東西,那他為啥還問你,那肯定希望你回答出來點內在東西:

  什么是自動裝箱,拆箱

  先拋出定義,Java中基礎數據類型與它們的包裝類進行運算時,編譯器會自動幫我們進行轉換,轉換過程對程序員是透明的,這就是裝箱和拆箱,裝箱和拆箱可以讓我們的代碼更簡潔易懂

  Java中基礎數據類型與它們對應的包裝類見下表(共8種):

01

  當表格中左邊列出的基礎類型與它們的包裝類有如下幾種情況時,編譯器會自動幫我們進行裝箱或拆箱.

  進行 = 賦值操作(裝箱或拆箱)

  進行+,-,*,/混合運算 (拆箱)

  進行>,<,==比較運算(拆箱)

  調用equals進行比較(裝箱)

  ArrayList,HashMap等集合類 添加基礎類型數據時(裝箱)

  我們看一段平常很常見的代碼:

public void testAutoBox() {

    List<Float> list = new ArrayList<>();

    list.add(1.0f);

    float firstElement = list.get(0);

}

  list集合存儲的是Float包裝類型,我傳入的是float基礎類型,所以需要進行裝箱,而最后的get方法返回的是Float包裝類型,我們賦值給float基礎類型,所以需要進行拆箱,很簡單,安排的明明白白

  具體自動裝箱,拆箱,代碼是如何實現的

  既然編譯器幫我們自動進行了裝箱,拆箱,那么編譯器到底做了些什么,要搞清楚這些,最簡單直接的方式就是看類經過編譯器編譯后的字節碼,下面是上面一段代碼的字節碼實現

public testAutoBox()V

   L0

    LINENUMBER 15 L0

    NEW java/util/ArrayList

    DUP

    INVOKESPECIAL java/util/ArrayList.<init> ()V

    ASTORE 1

   L1

    LINENUMBER 16 L1

    ALOAD 1

    FCONST_1

    INVOKESTATIC java/lang/Float.valueOf (F)Ljava/lang/Float;

    INVOKEINTERFACE java/util/List.add (Ljava/lang/Object;)Z

    POP

   L2

    LINENUMBER 17 L2

    ALOAD 1

    ICONST_0

    INVOKEINTERFACE java/util/List.get (I)Ljava/lang/Object;

    CHECKCAST java/lang/Float

    INVOKEVIRTUAL java/lang/Float.floatValue ()F

    FSTORE 2

   L3

    LINENUMBER 18 L3

    RETURN復制代碼

  · L0,對應我們代碼的第一行,new了一個ArrayList,并賦值給了1號引用(就是list)。

  · L1,先加載list到棧頂,然后FCONST_1指令就是從常量池加載1.0f浮點數并壓入棧頂(這一塊知識,見附錄1),然后調用了Float類的靜態 valueOf方法,進行裝箱

  · ,然后調用list的add方法。

  · L2,先加載list到棧頂,從常量池獲取0(float,int,long,double等基礎類型初始值都是0),調用list的get方法,檢查是否能轉換,調用了Float的floatValue方法,進行拆箱

  · ,存儲得到的浮點數。

  所以結果很明顯了,以float和Float為例,裝箱就是調用Float的valueOf方法new一個Float并賦值,拆箱就是調用Float對象的floatValue方法并賦值返回給float。其他基礎類型都是大同小異的,具體可以查看源碼。

  ##自動裝箱、拆箱中的坑 ###面試題中經常會有考點就是考察面試者對Java中自動裝箱、拆箱是否了解透徹,比如下面這一道面試題?

public void testAutoBox2() {

    //1

     int a = 100;

     Integer b = 100;

     System.out.println(a == b);

     //2

     Integer c = 100;

     Integer d = 100;

     System.out.println(c == d);

     //3   

     c = 200;

     d = 200;

     System.out.println(c == d);

}

  請問執行結果是多少?題目很常見,我們來分析一下:

  第1段代碼,基礎類型a與包裝類b進行==比較,這時b會拆箱,直接比較值,所以會打印 true

  第2段代碼,二個包裝類型,都被賦值了100,所以根據我們之前的解析,這時會進行裝箱,調用Integer的valueOf方法,生成2個Integer對象,引用類型==比較,直接比較對象指針,這里我們先給出結論,最后會分析原因,打印 true

  跟上面第2段代碼類似,只不過賦值變成了200,直接說結論,打印 false

1

  結果是不是很詭異,我們直接去看Integer類valueOf方法的實現(JDK8的實現) 

public static Integer valueOf(int i) {

    if (i >= IntegerCache.low && i <= IntegerCache.high)

        return IntegerCache.cache[i + (-IntegerCache.low)];

    return new Integer(i);

}

  可以看到,這里的實現并不是簡單的new Integer,而是用IntegerCache做一個cache,cache的range是可以配置的

private static class IntegerCache {

  static final int low = -128;

  static final int high;

  static final Integer cache[];

  static {

  int h = 127;

  String integerCacheHighPropValue =

          sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");

  if (integerCacheHighPropValue != null) {

     try {

         int i = parseInt(integerCacheHighPropValue);

         i = Math.max(i, 127);

         // Maximum array size is Integer.MAX_VALUE

         h = Math.min(i, Integer.MAX_VALUE - (-low) -1);

        } catch( NumberFormatException nfe) {

         // If the property cannot be parsed into an int, ignore it.

       }

     }

     high = h;

     cache = new Integer[(high - low) + 1];

     int j = low;

     for(int k = 0; k < cache.length; k++)

        cache[k] = new Integer(j++);

  這是IntegerCache靜態代碼塊中的一段,默認Integer cache 的下限是-128,上限默認127,可以配置,所以到這里就清楚了,我們上面當賦值100給Integer時,剛好在這個range內,所以從cache中取對應的Integer并返回,所以二次返回的是同一個對象,所以==比較是相等的,當賦值200給Integer時,不在cache 的范圍內,所以會new Integer并返回,當然==比較的結果是不相等的。

  附錄1:JVM字節碼整型的入棧指令有4個,分別是:

iconst(0~5分別對應iconst_0、iconst_1、iconst_2、iconst_3、iconst_4、iconst_5,-1對應iconst_m1)

bipush (-128~127)

sipush (-32768~32767)

ldc (-2147483648~2147483647)


  更多關于“Java培訓”的問題,歡迎咨詢千鋒教育在線名師。千鋒已有十余年的培訓經驗,課程大綱更科學更專業,有針對零基礎的就業班,有針對想提升技術的好程序員班,高品質課程助理你實現java程序員夢想。

tags:
聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
久久精品国产99久久丝袜蜜桃| WWW夜片内射视频日韩精品成人| 中文字幕人妻丝袜成熟乱| 中文字幕无码久久一区| XXXX内射美国老太太| 豆国产96在线 | 亚洲| 国产精品一线二线三线| 精品一区二区三区自拍图片区| 久亚洲一线产区二线产区三线产区 | 47147大但人文艺术怎么样| 白种女BBWBBWBBW| 国产女人18毛片水真多18精品| 精品无码老熟妇MAGNET| 女人被暴躁C到高潮容易怀孕| 日韩人妻无码一区二区三区 | 国产乱码1卡二卡3卡四卡| 久久人人爽天天玩人人妻精品| 欧美裸体XXXX| 五月丁香合缴情在线看| 伊人久久大香线蕉AV一区| 白人极品少妇XXXⅩ做受| 丰满少妇女人A毛片视频| 韩国av一区二区| 免费网站看AV片| 熟妇人妻无码中文字幕老熟妇| 亚洲国产精品无码一线岛国| 99久久久无码国产精品9| 国产超碰人人爽人人做| 九九九国产精品成人免费视频| 欧美日韩乱一区二区三区| 无码一区18禁3D| 中文无码久久精品| 国产V亚洲V天堂A无码| 久久久精品人妻一区二区三区四| 人妻丝袜AV先锋影音先| 亚洲JLZZJLZZ少妇| XXX.日本学生妹.COM| 好男人在线视频神马影视WWW| 欧美乱人伦人妻中文字幕| 亚洲AAAAA特级| BBBBB毛茸茸BBBBBBB| 国产亚洲精品国产福APP| 女生裙子里面到底穿了啥| 五月综合激情婷婷六月色窝| 亚洲色欲久久久久综合网| 亚洲AV无码专区在线播放| W永久939W乳液78| 激情亚洲一区国产精品| 人妻精品一区二区| 亚洲人成色7777在线观看不卡| 成人爽A毛片在线视频| 久久精品岛国AV一区二区无码| 色噜噜国产精品视频一区二区| 一本加勒比HEZYO无码资源网| 丰满女教师中文字幕5| 老师黑色双开真丝旗袍| 无人区码一码二码三码是什么| AAA欧美色吧激情视频| 激情国产AV做激情国产爱| 日本少妇内射XXⅩⅩⅩⅩⅩⅩ| 亚洲熟女乱色一区二区三区| 国产成A人片在线观看视频| 免费无码黄网站在线观看| 亚洲AV日韩AV永久无码色欲| 帮妺妺洗澡忍不住C了她作文 | 天干天干啦夜天天喷水| 2023国精产品一二二线免费| 好疼太大了太粗太长了视频| 日日摸夜夜添狠狠添欧美| 在办公室里揉弄小雪好爽| 国产日韩在线欧美视频| 人妻一区二区在线| 一区二区三区欧美| 国产成人一区二区三区免费视频| 你真紧你这是要我的命吗什么意思 | 国产美女遭强高潮网站| 青青草国产成人A∨| 艳妇臀荡乳欲伦69调教视频| 国产免费观看久久黄AV片| 日韩欧国产精品一区综合无码| 中文字幕无码乱人伦| 精品国产你懂的在线观看| 天美传媒MV免费观看软件特色| 2023国精产品一二三四区| 韩国激情高潮无遮挡HD| 双腿被绑成M型调教PⅠAY照片| JIZZYOU中国少妇高潮| 美女脱个精光扒开尿口图片无遮挡 | 老熟女重囗味HDXX70星空| 亚洲VA在线∨A天堂VA欧美V| 国产成人国拍亚洲精品| 人与畜禽CROPROATION| 18禁超污无遮挡无码免费游戏| 精品人妻Av乱码一区二区| 无码一区二区av| 国产波霸爆乳一区二区| 日本一区二区三区免费播放 | 国产成人AV片无码免费| 全力以赴的行动派第二季| 中文无码乱人伦中文视频播放| 精品97国产免费人成视频| 天堂8在/线中文在线资源8| JAPANXXXXHDAV无码| 久久人人爽人人爽人人片AV麻烦 | 日本极品少妇XXXXⅩOOO| 99久久久成人国产精品免费| 九色丨PORNY丨自拍 ICU| 性XXXXXXXXX18欧美人| 触及真心在线观看| 日本55丰满熟妇厨房伦| 曰本无码人妻丰满熟妇啪| 久久EE热这里只有精品| 亚洲AV永久无码精品成人| 国产亚洲欧美日韩亚洲中文色| 无码专区—VA亚洲V天堂| 国产激情一区二区三区| 少妇性活BBBBBBBBB四川| 成年动作片AV免费网站| 日本精品一线二线三线区别在哪里 | CHINESE国产AVVIDE| 欧美搡BBBBB搡BBBBB| 在公车被灌满JING液| 麻豆国产96在线 | 日韩| 在厨房拨开内裤进入毛片 | 亚洲成在人线AV自拍| 国精产品一区二区三区糖心| 小奶瓶(产奶)沈姜| 国产亚洲AV人片在线观看| 亚洲AV毛茸茸av成熟女人| 国产亚洲精久久久久久无码7| 午夜男女爽爽影院免费视频下载| 国产精品有码无码AV在线播放| 午夜A级理论片在线播放717| 国产Chinese男男做受g片| 熟妇熟女乱妇乱女网站| 成人动漫在线观看| 人妻无码AⅤ中文字幕日韩| AV无码久久久久不卡网站蜜桃| 毛很浓密超多黑毛的少妇| 亚洲中文字幕日产无码成人片| 久久久久久午夜成人影院| 一本大道无码日韩精品影视丶| 久久婷婷激情综合色综合俺也去 | 灌溉系统NPC游戏双男主| 熟女亚洲综合精品伊人久久| 国产精品久久久久久婷婷| 性欧美18-19SEX性高清播| 国内最真实ⅩⅩⅩ人伦| 亚洲人成网站18禁止大APP| 久久亚洲熟妇熟女ⅩXXXHD| 综合久久国产九一剧情麻豆| 侵犯美人妻中出中文字幕| 房中之术御女之功秘术| 无码人妻AⅤ一区二区三区用会员| 国产在线精品一区二区| 亚洲区激情区无码区| 麻豆人妻少妇精品无码专区2| 99精品电影一区二区免费看| 日本中文字幕一区二区有码在线| 国产AV无码专区亚洲AVJUL| 亚州中文字幕午夜福利电影| 久久国产免费直播| 337P人体粉嫩胞高清大图AV| 日本免费黄色网址| 国产精品三级一区二区| 亚洲乱理伦片在线观看中字 | 精品国产国偷自产在线观看| 又湿又紧又大又爽A视频男| 人妻丰满AV中文久久不卡| 国产97色在线 | 日韩| 亚洲成A人片在线观看无码不卡 | 无码丰满少妇2在线观看| 精产国品一二三产区区别在哪儿呢 | 久久久久亚洲AV无码专区首页网 | 曰本伦理漂亮妈妈| 欧美成人激情视频| 布丁漫画土豪漫画入口页面| 无码任你躁久久久久久久| 精品人妻人人做人人爽夜夜爽| 中文在线中文在A| 色欲色香天天天综合无码| 被强迫的爱人 电影| ASS中国人体欣赏PICS| 亚洲国产精久久久久久久| 色老板在线影院播放| 久久综合九色综合久99| 国产操熟女性爱导航| A级毛片无码免费真人久久| 差差差30分钟视频轮滑免费| 性色AV极品无码专区亚洲| 雷神ちゃんが人気の原因| 粉嫩av一区二区网站入口| 亚洲情A成黄在线观看动漫尤物| 人曾交互MOUSE农场| 黑人狂虐中国人妻陈艳| WWW射我里面在线观看| 亚洲成人无码一区二区三区| 人与畜禽共性关系的重要性| 极品少妇被扒开双腿躁出白小说 | 亚洲AV无码成人精品区国产|