Java继承——对象包装器与自动装箱

所有的基本类型都有一个与之对应的类

这些类称为包装器

对象包装器类是不可变的,即一旦构造了包装器,就不允许更改包装在其中的值

对象包装类还是final,因此不能定义它们的子类


假设:ArrayList<Integer> list = new ArrayList<>();

由于每个值分别包装在对象中,所以ArrayList<Integer>的效率远远低于int[]数组

但是方便添加:

list.add(3);将自动地变换成list.add(Integer.valueof(3));

这种变换被称为自动装箱或自动打包


相反地,当将一个Integer对象赋给一个int值时,将会自动地拆箱,编译器将下列语句:

int n = list.get(i);

翻译成

int n = list.get(i).intValue();


==运算符也可以应用于对象包装器对象,只不过检测的是对象是否指向同一个存储区域

自动装箱规范要求boolean、byte、char<=127,介于-128~127之间的short和int被包装到固定对象中


包装器类引用可以为null


如果在一个条件表达式中混合使用Integer和Double类型,Integer值就会拆箱,提升为double,再装箱为Double


装箱和拆箱是编译器认可的


因为Integer对象是不可变的,如果需要编写一个修改数值的方法,就需要使用在org.omg.CORBA包中定义的持有者类型,包括IntHolder、BooleanHolder等,每个持有者类型都包含一个公有域值

1.java.lang.Integer 1.0:

    int intValue()

    以int的形式返回Integer对象的值(在Number类中覆盖了intValue方法)

    static String toString(int i)

    以一个新的String对象形式返回给定数值i的十进制

    static String toString(int i,int radix)

    返回数值i的基于给定radix参数进制的表示

    static int parseInt(String s)

    static int parseInt(String s,int radix)

    返回字符串s表示的整型数值,给定字符串表示的是十进制的整数,或者是radix参数进制的整数

    static Integer valueOf(String s)

    static Integer valueOf(String s,int radix)

    返回用s表示的整型数值进行初始化后的一个新的Integer对象,给定字符串表示的是十进制的整数,或者是radix参数进制的整数

2.java.text.NumberFormat 1.1:

    Number parse(String s)

    返回数字值,假设给定的String表示了一个数值

猜你喜欢

转载自blog.csdn.net/qq_38386085/article/details/80759864