《java入门第一季》之Integer类和自动拆装箱概述
/ * int 仅仅是一个基本类型。int有对应的类类型,那就是Integer.
* 为了对基本数据类型进行更多的操作,更方便的操作,Java就针对每一种基本数据类型提供了对应的类类型——包装类类型。各个基本类型分配封装与之对应的类类型来对基本类型数据更方便的操作。
* byte Byte
* short Short
* int Integer(这个看起来比较特殊)
* long Long
* float Float
* double Double
* char Character(这个看起来比较特殊)
* boolean Boolean
*
* 用于基本数据类型与字符串之间的转换。
Integer类的另一个特性:Integer的数据直接赋值,如果在-128到127之间,会直接从缓冲池里获取数据
* 为了对基本数据类型进行更多的操作,更方便的操作,Java就针对每一种基本数据类型提供了对应的类类型——包装类类型。各个基本类型分配封装与之对应的类类型来对基本类型数据更方便的操作。
* byte Byte
* short Short
* int Integer(这个看起来比较特殊)
* long Long
* float Float
* double Double
* char Character(这个看起来比较特殊)
* boolean Boolean
*
* 用于基本数据类型与字符串之间的转换。
*/
JDK5的新特性,自动拆装箱。
/* * JDK5的新特性 * 自动装箱:把基本类型转换为包装类类型 * 自动拆箱:把包装类类型转换为基本类型 * */ public class IntegerDemo { public static void main(String[] args) { // 定义了一个int类型的包装类类型变量i // Integer i = new Integer(100); Integer ii = 100;//相当于上句语句,自动将100变为引用的Integer类型 ii += 200;//本身以为不同的类型相加会报错的,而这里并没有报错。 //这里不会报错,因为自动把ii变为int类型进行计算。 System.out.println("ii:" + ii); // 通过反编译后的代码,前面的三句话相当于下面的三句话 // Integer ii = Integer.valueOf(100); //自动装箱 // ii = Integer.valueOf(ii.intValue() + 200); //自动拆箱ii.intValue() ,再自动装箱Integer.valueOf(ii.intValue() + 200); // System.out.println((new StringBuilder("ii:")).append(ii).toString()); //结果是一个字符串类型
</pre><pre code_snippet_id="1678623" snippet_file_name="blog_20160511_3_6505667" name="code" class="java">
注意:
* 在使用JDK新特性这种方式时,Integer x = null;代码就会出现NullPointerException。空指针异常 * 建议先判断是否为null,然后再使用。if (iii != null) {}代码如下:
Integer iii = null; // NullPointerException if (iii != null) {//加入判断逻辑,就不会出现这个异常。 iii += 1000; System.out.println(iii); }
Integer类的另一个特性:Integer的数据直接赋值,如果在-128到127之间,会直接从缓冲池里获取数据
通过反编译,就知道了,针对-128到127之间的数据,做了一个数据缓冲池,如果数据是该范围内的,每次并不创建新的空间(不会创建新的地址即新的对象)