Java基础类型对应的8个包装类 自动装箱 自动拆箱

Java中为8中基本数据类又对应准备了8种包装类型。8种包装类属于引用数据类型,父类是Object 包装类的意义:
public class IntegerTest {
    public static void main(String[] args) {
        // 调用doSome方法的时候传递一个数字
        // 但是数字属于基本数据类型,而doSome方法参数为Object
        // 这时候需要将数字包装为一个Object
        MyInt i = new MyInt(123);
        doSome(i);
    }
    public static void doSome(Object obj){
        System.out.println(obj);
    }
}
class MyInt{
    int value;

    public MyInt(int value) {
        this.value = value;
    }
    public MyInt() {
    }

    public String toString(){
        return String.valueOf(value);
    }
}
实际开发中,不需要自己写包装类,SUN已经为我们提供了8种包装类:
基本数据类型 包装类型
byte java.lang.Byte(父类Number)
short java.lang.Short(父类Number)
int java.lang.Integer(父类Number)
long java.lang.Long(父类Number)
float java.lang.Float(父类Number)
double java.lang.Double(父类Number)
boolean java.lang.Boolean(父类Object)
char java.lang.Character(父类Object)
public class IntegerTest {
    public static void main(String[] args) {
        // 123基本数据类,进行构造方法的包装达到了:基本数据类型想引用数据类型的转换
        // 装箱
        Integer i = new Integer(123);

        // 将引用数据类型转换为基本数据类型--拆箱
        float f = i.floatValue();
        System.out.println(f);//123.0
    }

}
Integer的构造方法:
public class IntegerTest {
    public static void main(String[] args) {
        // Java9之后不建议使用这个构造方法
        // 将数字100转换为Integer包装类型
        Integer i1 = new Integer(100);
        System.out.println(i1);//100
        // 将String类型的数字,转换为Integer包装类型
        Integer i2 = new Integer("110");
        System.out.println(i2);//110
    }

}
通过访问包装类的常量,获取最大值和最小值:
public class IntegerTest {
    public static void main(String[] args) {
        // 通过访问包装类的常量,获取最大值和最小值
        System.out.println("byte最大值:" + Byte.MAX_VALUE + 
                ",byte最小值:" + Byte.MIN_VALUE);
        System.out.println("short最大值:" + Short.MAX_VALUE + 
                ",short最小值:" + Short.MIN_VALUE);
        System.out.println("int最大值:" + Integer.MAX_VALUE + 
                ",int最小值:" + Integer.MIN_VALUE);
        System.out.println("long最大值:" + Long.MAX_VALUE + 
                ",long最小值:" + Long.MIN_VALUE);
    }
}
JDK1.5之后,支持自动拆箱和自动装箱:
  1. 自动装箱:基本数据类型–》引用数据类型
  2. 自动拆箱:引用数据类型–》基本数据类型
public class IntegerTest {
    public static void main(String[] args) {
        // 自动装箱  int类型————自动转换为————》Integer
        Integer i = 100;
        System.out.println(i);//100
        // 自动拆箱  Integer类型————自动转换为————》int
        int j = i;
        System.out.println(j);//100

        Integer k = 100;
        // 自动拆箱
        System.out.println(k + 1);//101
    }
}

java种为了提高程序的执行效率,将-128~127之间所有的包装对象提前创建好, 放到了方法区的”整数型常量池“当中,目的是只要用这个区间的数据不需要再new,直接从整数型常量池当中取就可以:

public class IntegerTest {
    public static void main(String[] args) {
        Integer a = 128;
        Integer b = 128;
        System.out.println(a == b);// false
        
        Integer c = 127;
        Integer d = 127;
        System.out.println(c == d);// true
    }
}

发表评论