【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);
    }
}

 

posted @ 2020-06-24 10:49  尘封~~  阅读(301)  评论(0编辑  收藏  举报