对象包装器与自动装箱

    xiaoxiao2021-03-26  31

    所有的基本类型都有一个与之对应的类,这些类称为包装器(Wrapper)。 这些包装器类名为:Integer,Long,Float,Double,Short,Byte,Character,Void,Boolean(前六个类派生于公共的父类Number)。对象的包装器类都是不可变的,即一旦构造了包装器,就不允许更改包装在其中的值。同时,对象包装器类还是final,因此不能定义它们的子类。包含在包装器中的值是不会改变的。由于每个值分别包装在对象中,所以ArrayList<Integer>的效率远远低于int[] 数组。自动装箱/拆箱 ArrayList<Integer> arl =new ArrayList<>(); arl.add(3);将自动变换成arl.add(Integer.valueOf(3));-----自动装箱,将基本类型赋给包装器类型。int i=arl.get(n);自动转换为int i=arl.get(n).intValue();----自动拆箱,将包装器类型赋给基本类型。在算术表达式中也能够实现自动装箱/拆箱。 Integer i=9;   i++;编译器将自动插入一条拆箱指令,然后进行自增运算,最后再将结果装箱。 包装器对象的比较使用equals()方法,不能使用==(==比较的是地址)。包装器类引用可以为null。如果在一个表达式中混合使用Integer , Double类型,Integer值会自动拆箱,提升为double,再装箱为Double。                   Integer integer=4;          Integer integer2=4;          Double double1=4.0;          double d=4.0;                    System.out.println(double1==d);//包装器类型与基本类型          System.out.println(new Integer(2)==new Integer(2));//通过构造函数          System.out.println(integer==integer2);//通过自动装箱,且介于-128--127          System.out.println(new Integer(4)==integer);//构造函数与自动装箱          System.out.println(integer+double1); 输出结果为:                      true           false           true           false           8.0 装箱和拆箱是编译器认可的,而不是虚拟机。编译器在生成类的字节码时,插入必要的方法调用,虚拟机只是执行这些字节码。包装类型与基本类型的比较 包装类是引用类型,但可以直接用"=="跟基本类型比较 包装类与包装类的比较 如果包装类对象都是通过构造方法创建的:遵循对象的比较规则,即用"=="比较的是地址,用equals()比较对象的内容如果包装类对象都是通过自动装箱创建,且属于[-128,127],可以用"=="比较他们的值是否相等;如果在[-128,127]之外,那么遵循对象的比较规则如果两个对象分别通过自动装箱和构造方法创建的,不论是不是属于[-128,127],都遵循对象的比较规则。 关于[-128,127]: Integer类在初始化时,一个内部类的静态代码块将[-128,127]的每个整数都创建了Integer对象,并保存在一个数组中,今后在将[-128,127]中的一个整数自动装箱成Integer对象时,则直接指向这个数组中对应的对象,因此可以用"=="比较它们的值是否相等自动装箱规范要求boolean,byte,char<=127,介于-128--127之间的short和int被包装到固定的对象中。 字符串型的值转为基本类型: 用包装类的静态的parse...(String s)方法。注意没有Character类,String的toCharArray()方法转为字符数组 字符串转包装器类型 用包装类的构造器调用包装器类的valueOf(String s) 基本类型转为字符串 静态方法String.valueOf();基本变量+""; public int  intValue() 以 int 类型返回该 Integer 的值。-----拆箱 public long  longValue() 以 long 类型返回该 Integer 的值 public static  Integer  valueOf(int i) 返回一个表示指定的 int 值的 Integer 实例。-----装箱 public static  Integer  valueOf( String s) 返回保存指定的 String 的值的 Integer 对象。 public static int  parseInt( String s) 将字符串参数作为有符号的十进制整数进行解析
    转载请注明原文地址: https://ju.6miu.com/read-650058.html

    最新回复(0)