Java——包装类

包装类

就是将基本数据类型封装到类中。

包装类的产生原因:Object类可以接收所有引用数据类型。然而在Java中,数据类型分为基本数据类型和引用数据类型,为了使用Object接收一切东西,引出了包装类.

自己定义一个包装类

public class Test {
    public static void main(String[] args) {
        Object obj = new IntDemo(10);//向上转型
        fun(obj);
    }
    public static void fun(Object obj){
        IntDemo temp = (IntDemo) obj;//向下转型
        System.out.println(temp.intValue());
    }
}
class IntDemo{
    private int num;
    public IntDemo(int num){
        this.num = num;
    }
    public int intValue(){
        return this.num;
    }
}

通过包装类可以看出基本数据类型也可以像引用类型一样使用Object接收.这个时候的IntDemo实际上就是int数据类型的包装类,利用IntValue()就可以实现基本数据类型变为对象的需求。

Java中有8种数据类型,如果每种数据类型都按照以上方式编写,存在以下问题:
1. 开发中代码重复
2. 在进行数学计算的时候,必须利用明确的方法将包装的数据取出后才可以进行运算。

所以Java为了方便开发,专门提供了包装类的使用,而对于包装类的使用,提供了两种类型。

  • 对象型(Object的直接子类):Boolean、Character(char);
  • 数值型(Number的直接子类):Byte、Double、Short、Long、Integer(int)、Float;

装箱与拆箱

在包装类与基本数据类型处理之中存在有两个概念:

装箱:将基本数据类型变为包装类对象。利用每个包装类提供的构造方法实现

拆箱:将包装类中包装的基本数据类型取出,利用xxValue();方法

        Integer num = new Integer(10);//装箱
        int data = num.intValue();//拆箱

以上操作采用的是手工的装箱和拆箱。在JDK1.5之后,提供了自动拆装箱的机制,最为重要的是,由于此类机制的
存在,可以直接利用包装类的对象进行各种数学计算。

扫描二维码关注公众号,回复: 3948236 查看本文章
        Integer num = 10;
        System.out.println(num + 10);

这个时候依然存在有"==" 和 "equals" 问题

看一个例子

        Integer i1 = 10;
        Integer i2 = 10;
        Integer i3 = 200;
        Integer i4 = 200;
        System.out.println(i1 == i2);//true
        System.out.println(i3 == i4);//false
        System.out.println(i3.equals(i4));//true

说明:对于 Integer var = ? 在-128 至 127 范围内的赋值,Integer 对象是在IntegerCache.cache 产生,会复用已有对
象,这个区间内的 Integer 值可以直接使用==进行判断,但是这个区间之外的所有数据,都会在堆上产生,并不会
复用已有对象,这是一个大坑,推荐使用 equals 方法进行判断。

阿里编码规范:所有的相同类型的包装类对象之间值的比较,全部使用 equals 方法比较。

对于什么时候使用包装类,什么时候使用基本数据类型,这里也给出阿里编码规范:

1.[强制]:所有POJO类(简单java类,类中只有成员变量、构造方法、getter/setter)属性必须使用包装类

2.[强制]:RPC方法返回值和参数必须使用包装类

3.[推荐]:所有的局部变量使用基本类型

包装类与字符串的转换

以后要进行各种数据的输入,一定都是字符串类型的接收。所以在开发之中,如何将字符串变为各个数据类型,这个时候就需要包装类支持。

1.String变为基本数据类型 包装类.parseInt(字符串)

        String str = "123";
        int num = Integer.parseInt(str);//将字符串转int
        double num2 = Double.parseDouble(str);//将字符串转double
        System.out.println(num);
        System.out.println(num2);
 /**
 * 输出
 * 123
 * 123.0
 */

注意: 将 字 符 串 转 为 数 字 的 时 候 , 字 符 串 的 组 成 有 非 数 字 , 那 么 转 换 就 会 出 现 错误(NumberFormatException),而字符串与boolean转换就不受此影响。

        String str = "true";
        boolean bool = Boolean.parseBoolean(str);
        System.out.println(bool);

字符串内容除了true外,其他内容转成boolean都是false.

将基本数据类型转成字符串有2种方法:

1.使用"+" (str + 基本数据类型 )

2.String类提供的静态方法 valueOf(基本类型)

        int num = 10;
        String str = String.valueOf(num);
        System.out.println(str);

这里推荐第二种,因为第二种方法不会产生垃圾空间.

猜你喜欢

转载自blog.csdn.net/eve8888888/article/details/83475263