转自:http://www.blogjava.net/fancydeepin ]

前言: java 5.0 开始对基本数据类型提供了 自动装箱 (autoboxing) 和 自动拆箱 (autounboxing) 的功能, 使得基本数据类型与其对象之间的转换变得极其方便。
即便你不知道 什么是 自动装箱与拆箱,但相信你平常时候一直都在接触,只是在你还没有触及这样一个概念之前,一直没有发觉而已。 但是你需要知道在 java 中什么是自动装箱与拆箱,还需要知道 int 和 short 的装箱,因为这两个的装箱规则与 float 或 double 以及 其他的基本数据类型不完全一样。
自动装箱

12        /**3         * 实际上,程序运行时,系统为我们执行了下面一条语句: 4         * Integer number = new Integer(290); 5         */6        Integer number = 290; 7        System.out.println(number); 8

自动拆箱

1 2        Integer number =290; 3        // Other code 4      /** 5         * 实际上,程序运行时,系统为我们执行了下面一条语句: 6         * int number2 = number.intValue(); 7         */ 8        int number2 = number; 9        System.out.println(number2); 10

就上面示例代码块而言,实际上自动装箱就是系统自动帮我们去 new 了 Integer 对象,大家都知道,每个对象都会有一个 hashCode() 方法, 这个方法是继承 Object 而来,Object 类是所有类的超类。当需要比较两个对象是否相等时,可以用 " == " 和 equals 来做比较。 于对象而言, " == " 比较的是哈希码的值,也就是比较 hashCode() 方法的返回值,这个值是唯一的,在底层它是用来确定对象在堆内存上的存储位置。 " == " 也可以用来做基本数据类型的比较。equals 方法大家都知道,它是用来比较两个对象的内容是否一样。 上面说到自动装箱其实就是系统自动帮我们去 new 了 Integer 对象,但是神奇的事情发生了: 当 int 的取值在  -128 ~ 127 之间的时候,这时候系统并不会每次都帮我们去 new 一个 Integer 对象,而是取值相同的对象只会被 new 一次, 取值相同的 Integer 对象系统不会再去 new 一次,而是共享了已有的这个 Integer 对象。 而当 int 的取值在  -128 ~ 127 之外的时候,这时候不管 Integer 对象的取值是否一样,系统都会去 new 一个。

示例代码:

1 2        // -128~127 之内的数 3        Integer number1 =40; 4        Integer number2 =40; 5        System.out.println("number1 == number2 :  --->> " + (number1 == number2));    // output : true 6        7        // -128~127 之外的数 8        Integer number3 =128; 9        Integer number4 =128; 10       System.out.println("number3 == number4 :  --->> " + (number3 == number4));    // output : false11       System.out.println("number3 equals number4 :  --->> " + (number3.equals(number4)));    // output : true 12

示例代码输出结果:

12number1 == number2 :  --->>true3number3 == number4 :  --->>false4number3 equals number4 :  --->>true5

short 与 int 的装箱规则是一样,就不多说了,但不要认为所有的基本数据类型都有这样一个规则,比如 float 和 double 都没有这样的规则, float 和 double 每次装箱的时候都是会包装成一个对象的。

posted on 2013-04-03 23:13  lslzhang  阅读(110)  评论(0)    收藏  举报