JDK1.5新特性之---自动装箱/拆箱

来源:互联网 发布:网络错误691怎么解决 编辑:程序博客网 时间:2024/06/04 18:26

JDK1.5新特性之—自动装箱/拆箱

2017年12月16日 21:35:47


自动装箱:指开发人员可以把一个基本数据类型直接赋给对应的包装类。 自动拆箱:指开发人员可以把一个包装类对象直接赋给对应的基本数据类型。

基本数据类型包装类

包装类 基本数据类型 Byte byte Integer int Long long Boolean boolean Float float Double double Character char 对象变基本数据类型:拆箱 基本数据类型包装为对象:装箱

Example:

public class Demo5 {    public static void main(String[] args) {        String str = "12";        //字符串转换成int类型数据。 可以把字符串转换成对应的数字        int i = Integer.parseInt(str);        System.out.println(i+1);        //把数字转换成字符串        System.out.println("把整数转换成对应 的字符串:"+Integer.toString(i));        //把整数转换成对应的进制形式        System.out.println("10的二进制:"+ Integer.toBinaryString(10));        System.out.println("10的二进制:"+ Integer.toBinaryString(10));        System.out.println("10的十六进制:"+ Integer.toHexString(10));        //可以把字符串当成对应的进行数据帮你转换        String data = "10";        int a = Integer.parseInt(data, 2);        System.out.println("a="+a);        //集合: 集合是可以存储任意对象类型数据的容器。        ArrayList list = new ArrayList();        list.add(1);        list.add(2);        list.add(3);        //自动装箱: 自动把java的基本数据类型数据转换成对象类型数据。        int temp = 10;  //基本数据类型        Integer b =temp; //把a存储的值赋予给b变量。        //自动拆箱: 把引用类型的数据转换成基本类型的数据        Integer c = new Integer(13);        int d = c; //        System.out.println(d);        //引用的数据类型        Integer e = 127;        Integer f = 127;         System.out.println("同一个对象吗?"+(e==f)); // ture    }}

注意:

Integer类内部维护 了缓冲数组,该缓冲数组存储的-128~127
这些数据在一个数组中。如果你获取的数据是落入到这个范围之内的,那么就直接从该缓冲区中获取对应的数据。

看源码:


 /**     * Cache to support the object identity semantics of autoboxing for values between     * -128 and 127 (inclusive) as required by JLS.     *     * The cache is initialized on first usage.  The size of the cache     * may be controlled by the {@code -XX:AutoBoxCacheMax=<size>} option.     * During VM initialization, java.lang.Integer.IntegerCache.high property     * may be set and saved in the private system properties in the     * sun.misc.VM class.     */    private static class IntegerCache {        static final int low = -128;        static final int high;        static final Integer cache[];        static {            // high value may be configured by property            int h = 127;            String integerCacheHighPropValue =                sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");            if (integerCacheHighPropValue != null) {                try {                    int i = parseInt(integerCacheHighPropValue);                    i = Math.max(i, 127);                    // Maximum array size is Integer.MAX_VALUE                    h = Math.min(i, Integer.MAX_VALUE - (-low) -1);                } catch( NumberFormatException nfe) {                    // If the property cannot be parsed into an int, ignore it.                }            }            high = h;            cache = new Integer[(high - low) + 1];            int j = low;            for(int k = 0; k < cache.length; k++)                cache[k] = new Integer(j++);            // range [-128, 127] must be interned (JLS7 5.1.7)            assert IntegerCache.high >= 127;        }        private IntegerCache() {}    }