自动装箱与拆箱

写在之前

以下是《Java8编程入门官方教程》中的一些知识,如有错误,烦请指正。涉及的程序如需下载请移步http://down1.tupwk.com.cn/qhwkdownpage/978-7-302-38738-1.zip

自动装箱

简化了在基本类型和对象之间转换所需的代码。

类型封装器

主要有:Double、Float、Long、Integer、Short、Byte、Character、Boolean,它们包含在java.lang中。把值封装在对象中的过程称为装箱。

Integer iOb = new Integer(100); //手动装箱

从类型封装器中提取值的过程称为拆箱。

int i = iOb.intValue();//手动拆箱

自动装箱是指在需要某种类型的数据对象时,把该基本类型自动装箱到其等效的类型封装器的过程。不需要显式地构造对象。

自动拆箱是指当需要某个装箱对象的值时,从类型封装其实把装箱对象的值自动地提取出来的过程。

Integer iOb =100; //自动装箱
int i = iOb;    //auto-unbox

除了赋值的情况,自动装箱在基本类型必须转化为对象时会自动发生,自动拆箱在对象必须转化为基本类型时会自动发生。

class AutoBox2 {  
  // 方法接收一个 Integer. 
  static void m(Integer v) {  
    System.out.println("m() received " + v); 
  }   
  
  //返回一个int. 
  static int m2() { 
    return 10; 
  } 
 
  // 返回一个 Integer. 
  static Integer m3() { 
    return 99; // autoboxing 99 into an Integer. 
  } 
 
  public static void main(String args[]) { 
 
    // Pass an int to m().  Because m() has an Integer 
    // parameter, the int value passed is automatically boxed. 
    m(199); 
 
    // Here, iOb recieves the int value returned by m2(). 
    // This value is automatically boxed so that it can be 
    // assigned to iOb. 
    Integer iOb = m2();   
    System.out.println("Return value from m2() is " + iOb);  
 
    // Next, m3() is called. It returns an Integer value 
    // which is auto-unboxed into an int. 
    int i = m3(); 
    System.out.println("Return value from m3() is " + i);  
 
    // Next, Math.sqrt() is called with iOb as an argument. 
    // In this case, iOb is auto-unboxed and its value promoted to 
    // double, which is the type needed by sqrt(). 
    iOb = 100; 
    System.out.println("Square root of iOb is " + Math.sqrt(iOb)); 
  }  
}

下面看一下表达式之中,数值对象被自动拆箱,表达式结果必要时重新装箱的情况。

class AutoBox3 { 
  public static void main(String args[]) { 
     
    Integer iOb, iOb2; 
    int i; 
 
    iOb = 99; 
    System.out.println("Original value of iOb: " + iOb); 
 
    // The following automatically unboxes iOb, 
    // performs the increment, and then reboxes 
    // the result back into iOb. 
    ++iOb; 
    System.out.println("After ++iOb: " + iOb); 
 
    // Here, iOb is unboxed, its value is increased by 10 
    // and the result is boxed and stored back in iOb. 
    iOb += 10;  
    System.out.println("After iOb += 10: " + iOb); 
 
    // Here, iOb is unboxed, the expression is  
    // evaluated, and the result is reboxed and 
    // assigned to iOb2. 
    iOb2 = iOb + (iOb / 3); 
    System.out.println("iOb2 after expression: " + iOb2); 
 
    // The same expression is evaluated, but the 
    // result is not reboxed. 
    i = iOb + (iOb / 3); 
    System.out.println("i after expression: " + i); 
  }  
}

注意:使用封装类型做计算,因为涉及到自动装箱和拆箱,比使用基本类型,代码的效率要低很多。因为每次装箱和拆箱都增加了基本类型没有的开销。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容