【Java常用类之integer包装类 22】
一、八种基本类型对应的包装类型
基本数据类型 包装类型(引用数据类型)
byte java.lang.Byte;
short java.lang.Short;
int java.lang.Integer;
long java.lang.Long;
float java.lang.Float;
double java.lang.Double;
booblean java.lang.Booblean;
char java.lang.Character;
引入包装类的作用:方便编程
自动装箱可以简单理解为:基本数据类型转换为引用数据类型
自动拆箱可以简单理解为:引用数据类型转换为基本数据类型
二、详细介绍integer类型
1、Integer类在对象中包装了一个基本类型int的值,integer类在对象中包含了一个int类型的字段
static int MAX_VALUE : 值为 2^31-1 的常量,它表示 int 类型能够表示的最大值。
static int MIN_VALUE:值为 -2^31 的常量,它表示 int 类型能够表示的最小值。
……
2、提供了多个方法,能在int和string类型之间相互转换,还提供了处理int类型时非常有用的其他一些常量和方法
package com.JavaStudy.wrapperInteger0623; /** * @Author wufq * @Date 2020/6/23 16:58 */ public class IntegerTest01 { public static void main(String[] args){ //关于常量 System.out.println("int的最大值:"+Integer.MAX_VALUE);// 2147483647 System.out.println("int的最小值:"+Integer.MIN_VALUE);// -2147483648 //构造integer类型对象 //将int -->integer类型 包装过程(装箱) Integer i1 = new Integer(10); //integer --> int 拆箱 int i2 = i1.intValue(); System.out.println("i2:"+i2); //Integer(String s)构造方法:表示String参数所指示的int值,并且重写了toString方法 Integer i3 = new Integer("123"); System.out.println("i3:"+i3.toString()); //此例可以看出构造方法String参数表示的只能是int值,如果是字符串就会报NumberFormatException异常 Integer i4 = new Integer("中国"); System.out.println("i4:"+i4.toString()); //Integer类重写了equals方法(equals是Object类的方法,比较的是内存地址),重写以后比较的是值 Integer i5 = new Integer(10); Integer i6 = new Integer(10); System.out.println(i5==i6);//false System.out.println(i5.equals(i6));//true } }
3、JDK5.0特性(JDK1.5之后,包含1.5在内,可以进行自动装箱和拆箱)
自动装箱:auto.boxing
自动拆箱:auto_unboxing
注意:自动装箱和自动拆箱属于编译期间功能,这种功能会方便程序编写,但是程序真正运行依然用的是new Integer();
package com.JavaStudy.wrapperInteger0623; /** * @Author wufq * @Date 2020/6/23 17:26 */ public class IntegerTest02 { public static void main(String[] args){ //JDK1.5版本之前的装箱和拆箱 Integer i1 = new Integer(10); int i2 = i1.intValue(); //JDK1.5版本之后的装箱和拆箱 Integer i3 = 10; int i4 = i3; //自动装箱、拆箱程序真正运行仍然是new Integer i5 = 300; Integer i6 = 300; System.out.println(i5 == i6);//false -->底层仍然是:Integer i5 = new Integer(300); System.out.println(i5.equals(i6));//true Integer i7 = 100; Integer i8 = 100; System.out.println(i7==i8);//true } }
对比i5 == i6和i7==i8结果发现前者是false,后者是true 为什么会有这样不同的结果?
原因:integer的缓存问题:integer默认的缓存区间是-128~127,但是可以手动设置缓存区间(设置vm arguments参数 -XX:AutoBoxCacheMax=2008)
4、int、String、integer三者之间相互转换
package com.JavaStudy.wrapperInteger0623; /** * @Author wufq * @Date 2020/6/24 09:55 */ public class IntegerTest03 { public static void main(String[] args){ //Integer ---> String Integer i1 = 10; String s1 = i1.toString(); System.out.println(s1); //String ---> Integer Integer i2 = Integer.valueOf("123"); System.out.println(i2); //int ---> String int i3 = 10; String s2 = i3+""; //String ---> int int i4 = Integer.parseInt("11"); System.out.println(i4); //int --->Integer Integer i5 = Integer.valueOf(10); //Integer ---> int int i6 = i5.intValue(); System.out.println(i6); } }