自动装拆箱和枚举类

一、自动装箱和拆箱
    1.有时需要将int这样的基本数据类型转换为引用类型对象,比如有这样的一个方法:pubic void show(Object obj){},在JDK1.5之前,如果要调用这个方法传入一个实参10是会报错的,
因为你传入的是基本数据类型,而接收的是引用数据类型,这两者之间是不同的类型。这时就需要将这个基本数据类型包装成引用数据类型,在JDK1.5之前,需要这么做:
Integer a = new Integer(10);这样的一条指令就实现了将10这个基本数据类型包装成了引用数据类型,接下来将a传给这个方法就不会报错了。在JDK1.5之后,直接将10传进去不会报错,
这叫自动装箱。先执行了Integer a = new Integer(10);这一步,再将a传给obj这个形参。
    2.基本数据类型(primitive)的自动装箱、拆箱是J2SE5.0,即JDK1.5之后提供的新功能,为打包基本数据类型提供了方便,但提供方便的同时隐藏了细节,建议在能够区分基本数据类型与
引用类型的差别时再使用.
    3.一个自动装箱的例子:Integer i = 10;相当于Integer i = new Integer(10);把10先包装成它的一个包装类叫Integer,再把这个包装类对象赋值给Integer的一个变量。在进行编译的
时候,编译器根据语句上下文判断是否进行自动装箱操作。在上例中变量i引用的是Integer类的实例。同样的操作适用于boolean、byte、short、char、long、float、double等基本数据类型,
分别使用对应的包装类型(wrapper types)Boolean、Byte、Short、Character、Long、Float、Double。
    4.J2SE5.0中也可以自动拆箱(unboxing),也就是将对象中的基本数据类型信息自动取出,例如:
        Integer m = 10;
        int n = m;
        m变量在自动装箱为Integer的实例后,如果被赋值给一个int类型的变量n,则会自动转换为int类型再赋值。在运算时,也可以进行自动装箱和拆箱,如:
    Integer i = 10;
    System.out.println(i + 10); // 20
    Sysout.out.println(i++); // 10
public class Demo {
public static void main(String[] args) {
int i = 10;
double d = 10.5;
// 把基本数据类型赋值给引用数据类型,基本数据类型会在编译的时候自动装箱
Integer num1 = i;
Double num2 = d;
System.out.println(num1);
System.out.println(num2);
// 把包装类(引用数据类型)赋值给基本数据类型,会自动做拆箱操作
int j = num1; // 相当于int j = num1.intValue();
double dd = num2;// 相当于 double dd = num2.doubleValue();
System.out.println(j);
System.out.println(dd);

Object o = i;
Integer b = (Integer)o;
System.out.println(b.intValue());
}
}
二、枚举类型(enum)
1.创建一个枚举类的语法:
    public enum Color{
        RED,BLUE,BLACK,YELLOW,GREEN;// 枚举类型的值
    } 
    创建一个枚举类型我们使用enum这个关键字,而不是class.访问方式:类名.值;enum很像特殊的class,实际上enum声明定义的类型就是一个类。这些类都是类库中Enum类的子类
(java.lang.Enum<E>),他们继承了Enum类中许多有用的方法。枚举值都是public static final的,也就是常量,因此枚举类中的枚举值应全部大写。枚举类型是class,在枚举类型
中有构造器,字段和方法。但枚举的构造器有很大的不同:
    (1)构造器只是在构造枚举值的时候被调用;
    (2)构造器私有private,不允许有public构造器;
    (3)枚举可以在switch语句中使用;
enum Person{
P1("张三",30),P2("李四",25);
    private String name;
    private int age;
    private Person(String name, int age){
        this.name = name;
        this.age = age;
    }
    // 省略字段的读写方法
}
具体内容参看:https://www.cnblogs.com/hyl8218/p/5088287.html

猜你喜欢

转载自blog.csdn.net/weixin_42051619/article/details/80958154