欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

java java面向对象-装箱和拆箱操作,java面向对象装箱

来源: javaer 分享于  点击 2148 次 点评:243

java java面向对象-装箱和拆箱操作,java面向对象装箱


20180322 java java面向对象-装箱和拆箱操作


java中的8大包装类:


---------------------------------
基本数据类型    |    包装类     |
----------------|---------------|
byte                |    Byte       |
----------------|---------------|
short               |    Short      |
----------------|---------------|
int                  |    Integer    |
----------------|---------------|
long                |    Long       |
----------------|---------------|
char                |    Character  |
----------------|---------------|
float               |    Float      |
----------------|---------------|
double            |    Double     |
----------------|---------------|
boolean          |    Boolean    |
---------------------------------




8大基本数据类型的包装类都是使用final修饰的,即都是最终类,只能被使用,不能被继承(即不能有子类)。


名词解释:
  装箱操作:把一个基本数据类型的值转换成对应的包装类对象;
  拆箱操作:把包装类对象转换成对应的基本数据类型的值。




下面演示包装类,这里仅仅演示Integer包装类,例子为装箱和拆箱的操作


public class IntegerDemo
{
  public static void main(String[] args)
  {
    int num1 = 1;
    int num2 = 2;
    integer i1 = new Integer(num1);//装箱操作的一种写法(方式1)
    integer i2 = Integer.ValueOf(num1);//装箱操作的另外一种写法(方式2)




    int i3 = i1.intValue();//拆箱操作,此时i3为 1


    System.out.println(i1);//此时输出  1,本来应该打印出一个hashCode,
                           //这里却打印出一个值,因为Integer类
                           //覆盖了Object类的toString()方法
    System.out.println(i2);//此时输出  2,理由同上
    System.out.println(i3);//此时输出  1
  }
}




在java的集合框架中,只能存储对象,不能存储基本数据类型值。意味着每次存储到集合中的基本数据都要手动装箱,这样很麻烦。
Sun公司从java5开始提供了自动装箱和自动装箱的功能。


名词解释:
  自动装箱操作:可以直接把一个基本数据类型的值赋值给对应的包装类对象;
  自动拆箱操作:可以直接把包装类对象赋值给对应的基本数据类型的值。




//自动拆箱,自动装箱
public class IntegerDemo
{
  public static void main(String[] args)
  {
    Ingteger num1 = 16;//自动装箱
    int num2 = num1;//自动拆箱
    
    System.out.println(num1);//此时输出  16
    System.out.println(num2);//此时输出  16
  }
}








编译前:
integer num1 = 16;


编译后:
Integer integer2 = Integer.valueOf(16);
int j = integer2.intValue();


分析 自动拆箱和自动装箱的编译前和编译后的代码可知,自动拆箱和自动装箱也是一个语法糖,即自动拆箱和自动装箱是编译器级别的新特性,目的是让开发人员更方便的拆箱和装箱(在底层依然是手动装箱和拆箱操作)。但装箱操作使用的是 Integer.valueOf()操作,而不是直接new Integer。




switch之前支持的数据类型是byte、int、short、char,现在也支持了对应的包装类。


eg:
 


public class IntegerDemo
{
  public static void main(String[] args)
  {
    Ingteger num1 = 16;


    swich(num1)
    {
      case 1:break;
      case 2:break;
    }
  }
}


而编译后,
    swich(num1)
    {
      case 1:break;
      case 2:break;
    }


变成了


    swich(integer3.intValue())
    {
      case 1: // '\001'
      case 2: // '\002'
      default:
         return;
    }


说明switch在处理 包装类时,也使用了语法糖。




下面看这个语句:
Object object = 16;
 
这句话是正确的,因为实际上上述语句隐含执行了两个语句,即:


语句1:自动装箱,integer i = 16;
语句2:引用类型的自动转换,把子类对象赋给父类变量(小类型赋给父类),即 Object object = i;


所以得出的结论是:Object可以接受一切类型的值。
推导出的结论是:Object数组( Object[] )可以装一切类型的数据,eg:
Object[] i = {12,"ABC",16.25,true};



















































相关文章

    暂无相关文章
相关栏目:

用户点评