南通做百度网站的公司,网站开发人员考核指标,wordpress 发帖固定模板,网站建设建网站做网站网站设计JDK5.0 之后提供了一种新特性#xff1a;自动装箱拆箱。 既然是装拆箱#xff0c;那么我们先来看看这个所谓的“箱”#xff1a; java中的8种基本数据类型都有与之对应的封装类#xff08;封装类就是所谓的箱#xff09;。分别是#xff1a;byte short int long double f…JDK5.0 之后提供了一种新特性自动装箱拆箱。 既然是装拆箱那么我们先来看看这个所谓的“箱” java中的8种基本数据类型都有与之对应的封装类封装类就是所谓的箱。分别是byte short int long double float char boolByte Short Integer Long Double Float Character Boolean这一点上一篇文章也提到了。 这里说句题外话为什么要有封装类因为java是面向对象的语言一切皆对象。有些时候最好甚至必须使用对象然而基本数据类型并不是对象所以封装类便解决了这个问题把基本数据类型封装到对应的封装类中成为一个对象。注JDK5.0之后才产生的封装类以及装箱拆箱等特性。 装箱拆箱很形象的说明了这一操作的动作是怎样的。即装箱就是把基本数据类型封装到箱子里封装成与之对应的封装类而成为一个实例拆箱就是把一个实例从箱子里拿出来。 在JDK5.0之前 1 Integer a 1; 如果这样写是错误的类型转换错误。然而现在JVM会自动做一些必要的操作使得上面的不用new关键字实例化Integer对象而是直接赋上一个常数的操作合理。好比把一件东西装到一个箱子里封装类的对象这就是自动装箱。 反之 1 Integer b new Integer(1);
2 int c b; 把一个Integer的对象b直接赋值给int变量cJVM默认会取出b的值赋给c就好像从箱子里拿出一件东西给了谁谁谁这就是自动拆箱。 而且不管是装箱还是拆箱你都不必操心这是是怎么做的JVM会搞定这些。换句话说你只要知道可以这样赋值就好Integer a 1;。除非你想知其然亦知其所以然。其中装箱操作默认调用的是Integer的静态方法valueOf拆箱操作默认调用的是Integer的intValue方法。下面是jdk1.6.0_10文档中Integer类的源码valueOf 1 public static Integer valueOf(int i){
2 final int offset 128;
3 if (i -128 i 127) { // must cache
4 return IntegerCache.cache[i offset];
5 }
6 return new Integer(i);
7 } intValue 1 public int intValue(){
2 return value;
3 } 至于其中的IntegerCache是因为JVM的优化和常量池技术使得Integer类在用Integer a 1; 这样的方式声明变量时当赋予的值在-128-127之间时会在实例化的同时将引用加入到常量池中以便以后的操作中可以从常量池中获取这个值减少了资源的浪费也减少了对内存的操作使系统速度相对快一些。转载于:https://www.cnblogs.com/lipijin/archive/2013/05/08/3066657.html