为了更好的了解Integer这个类,我们从它的定义、常见的构造方法和成员方法、和自动装箱和自动拆箱的操作、创建对象时直接赋值和用new关键字的区别、以及从考试题上去加深理解。
1.什么是Integer类?
int基本数据类型对应的包装类。
2. 常见的构造方法?
public Integer(int value):
Integer integer = new Integer(3);
(1)通过传入int类型的构造方法创建Integer对象
(2)可以将int类型的数字转换成Integer类型的数字
public Integer(String s):
Integer integer = new Integer("123");
(1)通过传入Sring类型的字符串类型的数字创建Integer对象
(2)可以将字符串格式的数字转换成Integer类型的数字
3. 常见的成员方法?
public boolean equals(Object obj):
比较两个Integer类型的数字的数值大小是否一样(与==不同,==比较的是地址,下面给出例题用于区分)
public int intValue():
将Integer类型转换成int类型的数据(与前面的int型有参构造有相似的效果,都是将int转化为Integer型)
Integer integer = new Integer(12);
int a = integer.intValue();
public static int parseInt(String s):
将String类型的数字转换成int类型的数字
int i = Integer.parseInt("12");
public String toString():
将Integer类型转换String类型
Integer integer = new Integer(12);
String str = integer.toString;
public static Integer valueOf(int i):
将int类型转换Integer类型
Integer integer = Integer.valueOf(12);
public static Integer valueOf(String s):
将String类型转换Integer类型
Integer integer = Integer.valueOf("12");
4.自动装箱和自动拆箱
(1)什么是自动装箱?
拿int类来说,int类型的数据自动转化为它的包装类Integer。
Integer in = 12;//自动装箱:Integer in = Integer.valueOf(12);
System.out.println(in);
(2)什么是自动拆箱?
与自动装箱相反,就是自动把Integer自动转化为int型。
Integer in = new Integer(12);
int i = in + 2;//自动拆箱:int i = in.intValue() + 2
System.out.println(i);
自动装箱和拆箱的案例:
Integer in = 12;
in = in + 2;// in = Integer.valueOf(in.intValue() + 2)
System.out.println(in);
这里首先把in转化为int型,与2相加之后再转化为Integer型。
5.一道易错的练习题
大家的答案和结果一样嘛
解析:"==" 比较的是地址值,in1,in2,in3,in4都分别在堆中重新创建了一个对象用来存储常量池中的对应数值的地址值,所以前面两个是false。后面两个"=="赋值的结果为什么会不同呢,因为
Integer类中存在一个缓冲范围,有一个规范叫JSL(Java Language Specification,java语言规范)对Integer的缓冲做了约束,规定其范围为:(-128-127)之间。
这儿的IntegerCache有一个静态的Integer数组,在类加载时就将 -128 到 127 的Integer对象创建了,并保存在cache数组中,一旦程序调用valueOf 方法,如果i的值是在-128 到 127 之间就直接在cache缓存数组中去取Integer对象。
如果超出了范围,会从堆区new一个Integer对象来存放值。
最后那个128的赋值超过了127这个范围,就会重新创建一个对象,再去比较地址值就会有false的结果。
Integer的常量取值范围详解在这里:
链接:https://blog.csdn.net/MinggeQingchun/article/details/120704300