包装类

1.1 包装类概述

基本数据类型值对应的引用数据类型称为包装类。

由于我们的基本数据类型是不作为对象使用的,但是很多时候会用到对象作为参数,Java提供了包装类将基本数据类型包装为一个对象。

每个基本数据类型都有对应的包装类,默认值为null

byte——Byte Byte类将基本类型byte的值包装在一个对象中

short——Short

int——Integer

long——Long

float——Float

double——Double

char——Charactar

boolean——Boolean

除了intchar之外,其他基本类型的包装类与对应的基本数据类型名是一样的,且首字母均为大写。

1.2 类型转换之装箱、拆箱

我们先对装箱、拆箱进行内存分析

利用包装类表示int的最大值java int类型的包装类_包装类

1.2.1 类型转换之装箱

装箱即将基本类型转换为引用类型。

我们以int类型为例作为示范

int类型的包装类为Integer类;如何将int类型转为Integer类型呢?

  • 方法一:通过Integer类的构造方法:Integer(int value)
  • 方法二:通过Integer类的valueOf方法(静态方法)将int类的值作为参数即可实现:valueOf(int i)
public class Test{
    public static void main(String[] args){
    int a=10;
    Integer i1=new Integer(a);//通过Integer的构造器传参来实现装箱
    Integer i2=Integer.valueOf(a);//调用Integer.valueOf方法,返回一个 Integer指定的 int值的 Integer实例
    Integer i3=Integer.valueOf(10);
    }
}

1.2.2 类型转换之拆箱

拆箱即将引用类型转为基本类型

我们以int类型为例作为示范

  • 通过Integer类的intValue方法(非静态方法,为实例所用):intValue() :将 Integer的值作为 int
public class Test{
    public static void main(String[] args){
    int a=10;
    Integer i2=Integer.valueOf(a);//调用Integer.valueOf方法实现基本类型的装箱
    int a1=i2.intValue();//通过Integer实例对象调用intValue方法进行拆箱
    }
}

1.2.3 自动装箱、拆箱

JDK1.5 之后便支持自动装箱、拆箱

public class Test{
    public static void main(String[] args){
    int a=10;
    Integer i2=a;//自动装箱
    int b=i2;//自动拆箱
    }
}

1.3 类型之间的相互转换

基本类型与字符串可以进行相互转换;

我们以int类型和String类型之间转换为例

public class Test{
    public static void main(String[] args){
        //int类型转为String类型
        int a=10;
        //第一种方式:通过+号
        String st1=a+" ";
        System.out.println(st1);//10
        //第二种方式:(静态方法)toString();   通过int包装类调用来实现转型
        String st2=Integer.toString(a);
        System.out.println(st2);//10
        //拓展
        //int包装类中toString();重载方法 可以计算整数类型的不同进制下的值
        //计算16在十六进制前的值
        System.out.println(Integer.toString(16));//10
        
        
        
        //字符串转为int类型   
         String st3="19971007";
        //此时为字符串形式;  注意如果字符串要转为int型,那么他的字符串内容一定只能是int型的,否则抛出异常NumberFormatException
        //转型方法:Integer.paseInt(); 静态方法  转什么型用什么型的包装类进行调用方法
         int a3=Integer.parseInt(st3);
         System.out.println(a3);//19971007
        
        //拓展
        /*字符串转为基本类型中,boolean型是比较特殊的,因为boolean型的值只有ture以及false,
        当我们将字符串进行转型的时候,只有字符串的内容为"true"时才会转为"true",当字符串中内容为false,或者说是为非true时,转回来时均为false
        */
        
        String st4="true";
        String st5-="工地佬"
        boolean b=Boolean.paseBoolean(st4);
        System.out.println(b);//true.
        System.out.println(Boolean.paseBooleam(st5));//false
        
    }
}

1.4 整数缓冲区

在整数包装类中valueOf方法创建的实例可被享用,整数区间值在-128-127;一旦超出范围,将不再共享。

public class Test{
    public static void main(String[] args){
        //通过构造方法实例的包装类对象是独立的,不会共享
        Integer i1=new Integer(10);
        Integer i2=new Integer(10);
        System.out.println(i1==i2);//false
        //"=="对于基本类型而言比较的是值,对于引用类型而言对比的是堆内存地址;i1和i2均是new出来的,内存地址必然不同,也就不会相等!
        
        
        //通过valueOf实例的对象在整数缓冲区是会共享的
        Integer a=Integer.valueOf(88);
        Integer b=Integer.valueOf(88);
        Integer c=Integer.valueOf(200);
        Integer d=Integer.valueOf(200);
        System.out.println(a==b);//true   88在valueOf的整数缓冲区内,对象共享
        System.out.println(c==d);//false  200不在valueOf的整数缓冲区内,便会新建堆内存,则内存地址也就不一致了,自然不会相等!
    }
}