黑马程序员技术交流社区
标题:
自动装箱与拆箱求解?
[打印本页]
作者:
simonqian
时间:
2013-5-14 16:49
标题:
自动装箱与拆箱求解?
本帖最后由 simonqian 于 2013-5-16 08:02 编辑
Integer a = 13;这个叫装箱我知道,装箱是只针对基本数据类型吗?对象支持吗?拆箱是怎么拆的,求举个例子说明一下?
作者:
ZhaoYuBetter
时间:
2013-5-14 16:56
只针对基本数据类型,与其对应的包装类;装与拆。都是自动的。知道有这么一回事就可以了。
拆箱的例子:
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("a", 1); // 这是装箱, int -> Integer
int value = map.get("a"); // 这是拆了, Integer ->int,本来是返回 Integer类型的
作者:
许智敏
时间:
2013-5-14 17:45
是的,只针对基本数据类型。
装箱和拆箱的例子:
1、Integer i = 4;//这句话相当于 Integer i = new Integer(4); 在底层自动做了将基本数据类型封装成对象的动作。(装箱)
2、i = i + 6;//这句话相当于 i = new Integer(i.intValue()+6); 上一句中i已经封装成了Integer,在这里要与6做加法运算,所以要做拆箱的动作,是由Integer对象的intValue()搞定的。 (拆箱)
作者:
爪哇攻城狮
时间:
2013-5-14 19:06
本帖最后由 李松柏 于 2013-5-14 19:09 编辑
基本数据类型对象包装类:
基本数据类型对象包装类的最常见作用,
就是用于基本数据类型和字符串类型之间做转换
byte Byte
short Short
int Integer
long Long
char Character
float Float
double Double
boolean Boolean
public class WrapperDemo{
public static void main(String[] args){
int data1=21;
int data2=24;
//打包成为对象
Integer data1Wrapper = new Integer(data1);
Integer data2Wrapper = new Integer(data2);
//原始数据直接除以3
System.out.println(data1/3);
//将数据打包,转换为double型,除以3
System.out.println(data1Wrapper.doubleValue()/3);
//比较
System.out.println(data1Wrapper.compareTo(data2Wrapper));
}
}
复制代码
作者:
xuemeng
时间:
2013-5-14 19:39
楼上回答有误,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,
这个结果的原因也是我上面说的原因
作者:
xiewen
时间:
2013-5-14 23:35
装箱就是为了基本数据类型设计的,除了基本数据类型的包装类外,别的类就不存在装箱和拆箱的概念了。
拆箱就是基本数据类型的包装类调用与之对应的拆箱方法,如:Integer a=new Integer(3); int b=a.intValue();
装箱就是把基本数据类型封装成与之对应的包装类
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2