JavaSE三大特殊类之包装类

什么是包装类呢?

通俗的说,包装类就是将基本类型封装到类中。举个例子:

class IntDemo{
    private int value;
    //通过构造方法把value封装到IntDemo这个类中
    public IntDemo(int value){
        this.value = value;
    }
    //再通过intValue()这个方法取出来
    public int intValue(){
        return this.value;
    }
}

public class Test {

    public static void main(String[] args) {
        Object obj = new IntDemo(10);
        //如果要进行运算,还得把10取出来
        IntDemo demo = (IntDemo) obj;
        int data = demo.intValue();
        System.out.println(data+10);
    }

}

如果我们每个项目都自己写包装类的话,会特别麻烦,加大了工作量,效率也不高,况且上面的只是int的包装类,而Java中一共有八个基本数据类型,每个写一遍的话,重复代码会特别多。
所以Java中专门提供了一个包装类,把所有基本类型对应成它的类。

包装类分为以下两种类型:
数值型(Number的子类):Byte、Short、Integer(int)、Long、Float、Double
对象型(Object的子类):Boolean、Character(char)

装箱与拆箱

装箱:将基本数据类型变为包装类对象,通过每个包装类的构造方法实现装箱处理。
拆箱:将包装类中包装的基本数据类型取出,利用包装类提供的xxValue()方法实现拆箱
   例如:Integer提供的intValue()方法。

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

说了这么多,包装类的初衷到底是啥呢?
之前我们说过,Object类可以接收除了基本类型以外的所有类,现在有了包装类,那么Object就是真的可以接收所有的类了,基本类型也可以。
但是传统的装箱与拆箱使用时特别麻烦,JDK1.5提供了自动拆装箱

//自动装箱
Integer integer = 10;
//自动拆箱(不用调用xxValue()方法可以直接进行运算)
System.out.println(integer+10);

有了自动拆装箱之后,使用包装类与使用基本数据类型在用法上基本一致。那么到底使用哪一种呢?
案例编码规范:
1、【强制】所有POJO类属性必须使用包装数据类型
  POJO:简单Java类,类中只有属性与getter/setter,构造方法
2、【强制】RPC方法的返回值和参数必须使用包装数据类型
  RPC:远程过程调用
3、局部变量推荐使用基本数据类型

考点:

public class Test {

    public static void main(String[] args) {
        Integer i1 = 10;
        Integer i2 = 10;
        Integer i3 = 130;
        Integer i4 = 130;
        System.out.println(i1 == i2);		//true
        System.out.println(i3 == i4);		//false
    }

}

观察上面这段代码,==比较的是地址,按理来说没有新new对象,两个都该是true才对,可是第二个却是false?
原来啊,对于Integer var = ?直接赋值在[-128~127]区间内的值,Integer对象在缓存池产生,会复用已有的对象。而在这个区间外的所有数据均在堆上产生,并且不会复用已有对象。

补充:包装类进行数值比较使用equals方法。

String类如何转成基本数据类型?

使用各个包装类提供的parseXX()方法,例如:Integer.parseInt(str)

public class Test {

    public static void main(String[] args) {
        String str = "123";
        int i = Integer.parseInt(str);
        System.out.println(i+10);			//133
    }

}

注意:当字符串中包含了非数字,在运行时会抛出NumberFormatException异常。所以在调用Integer.parseInt()方法之前,先判断字符串是否由纯数字组成,怎么判断呢?我们可以把字符串转成字符数组,每个字符判断一下是否在0~9之间。

基本数据类型如何转成String类?

1、使用"+"
2、通过String的构造方法
3、[推荐]:使用String.valueOf(所有基本类型)

System.out.println(String.valueOf(123)+10);		//12310
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值