A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© simonqian 中级黑马   /  2013-5-14 16:49  /  1504 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 simonqian 于 2013-5-16 08:02 编辑

Integer a = 13;这个叫装箱我知道,装箱是只针对基本数据类型吗?对象支持吗?拆箱是怎么拆的,求举个例子说明一下?

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1

查看全部评分

5 个回复

倒序浏览
只针对基本数据类型,与其对应的包装类;装与拆。都是自动的。知道有这么一回事就可以了。
拆箱的例子:
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("a", 1);                        // 这是装箱, int -> Integer
int value = map.get("a");        // 这是拆了, Integer ->int,本来是返回 Integer类型的

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1

查看全部评分

回复 使用道具 举报
是的,只针对基本数据类型。

装箱和拆箱的例子:

1、Integer i = 4;//这句话相当于 Integer i = new Integer(4);   在底层自动做了将基本数据类型封装成对象的动作。(装箱)

2、i = i + 6;//这句话相当于  i = new Integer(i.intValue()+6);   上一句中i已经封装成了Integer,在这里要与6做加法运算,所以要做拆箱的动作,是由Integer对象的intValue()搞定的。 (拆箱)

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 李松柏 于 2013-5-14 19:09 编辑

基本数据类型对象包装类:
基本数据类型对象包装类的最常见作用,
就是用于基本数据类型和字符串类型之间做转换

byte                Byte
short                Short
int                Integer
long                Long
char                Character
float                Float
double        Double
boolean        Boolean
  1. public class WrapperDemo{  
  2.     public static void main(String[] args){  
  3.          int data1=21;  
  4.          int data2=24;  
  5.          //打包成为对象  
  6.          Integer data1Wrapper = new Integer(data1);  
  7.          Integer data2Wrapper = new Integer(data2);  
  8.          //原始数据直接除以3  
  9.          System.out.println(data1/3);  
  10.          //将数据打包,转换为double型,除以3  
  11.          System.out.println(data1Wrapper.doubleValue()/3);  
  12.         //比较  
  13.         System.out.println(data1Wrapper.compareTo(data2Wrapper));  
  14.     }  
  15.   
  16. }
复制代码
回复 使用道具 举报
楼上回答有误,Integer i = 5;   应该是这样   Integer i = Integer.valueOf(5),  不过底层封装的话有有区别,  如果是-128到 127 那么直接在缓存中,   如果超过这个范围, 那么就是用的new Integer(int i) ,这里顺便引出来一个面试题
Integer i1 = 5;
Integer i2 = 5;
System.out.println(i1==i2); //结果为true
Integer i3 = 500;
Integer i4 = 500;
System.out.println(i3 == i4)//结果为false,
这个结果的原因也是我上面说的原因

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1

查看全部评分

回复 使用道具 举报
装箱就是为了基本数据类型设计的,除了基本数据类型的包装类外,别的类就不存在装箱和拆箱的概念了。
拆箱就是基本数据类型的包装类调用与之对应的拆箱方法,如:Integer a=new Integer(3); int b=a.intValue();
装箱就是把基本数据类型封装成与之对应的包装类
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马