java三个特殊类之包装类

版权声明:白小姐 https://blog.csdn.net/bailerong123/article/details/89165026


在java之中,数据类型分为基本数据类型和引用数据类型,那么基本数据类型如何处理呢?

包装类基本原理

包装类就是将基本数据类型封装到类中
范例:定义一个自己的包装类:

/*
* 这是一个我们自己定义的包装类
* */
class IntDemo{
    private int num;
    public IntDemo(int num){
        this.num=num;
    }
    public int intValue(){
        return this.num;
    }
}
public class myIntDemo {
    public static void main(String[] args) {
        //子类向上转型
        Object obj=new IntDemo(55);
        IntDemo temp=(IntDemo) obj;//向下转型
        System.out.println(temp.intValue());//取出里面的基本数据类型操作
    }
}

结论:将基本数据雷响包装为一个类对象的本质就是使用Object进行接受处理。
Java中有8种数据类型,如果每种数据类型都按照以上方式编写,存在下面的问题:

  • 开发中代码重复

  • 在进行数学计算的时候,必须利用明确的方法将包装的数据取出后才可以进行运算。
    所以在java中为了方便开发,专门提供了包装类的使用,对于包装类的使用,提供了两种类型。

  • 对象型(Object的直接子类):Boolean、Characcter(char)

  • 数值型(Number的直接子类):Byte、Double、Short、Long、Integer(int)、Float;
    说明:关于我们的Number类
    1、Number类的定义:public abstract class Number implements java.io.Serializable.
    2、在Number类里面实际定义有六种重要方法

装箱与拆箱

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

  • 装箱:将基本的数据类型变为包装类对象,利用每一个包装类提供的构造方法实现装箱处理
  • 拆箱:将包装类中包装的基本的数据类型取出。利用Number类中提供六种方法
    范例:以int和Integer举例:
Integer num=new Integer55);//装箱
int data=num.intValue();//拆箱
System.out.println(data);

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

范例:自动装箱与拆箱处理

//自动装箱
Integer x=55;
//可以直接利用包装类对象操作
System.out.println(++x*5);

这个时候,我们依然存在有“==”和"equals"问题
范例:观察我们的问题

public class equalsTest {
    public static void main(String[] args) {
        Integer num1=new Integer(10);
        Integer num2=new Integer(10);
        System.out.println(num1==num2);
        System.out.println(num1==new Integer(10));
        System.out.println(num1.equals(new Integer(10)));
    }
}


我们观察一下我们的运行结果:

false
false
true

阿里编码规范中说:所有的像同类相的包装类对象之间值的比较,全部使用equals方法比较
说明:
对于Intger var=?在-128至127范围内的复制,Integer对象是在IntergerCache.Cache产生,会复用已有对象,这个区间内的Integer值可以直接使用“==”进行判断,但是这个区间之外的所有的数据,都会在对上产生,并不会复用已有的对象,这是一个大坑,所以我们推荐使用我们的equals方法进行判断。
关于基本数据类型与包装数据类型的使用标准如下:
1:【强制】所有POJO类属性必须使用包装类型。
2:【强制】RPC方法的返回值和参数必须使用包装数据类型。
3:【推荐】所有的局部变量使用基本数据类型。

字符串与基本数据类型的转换

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

1、String变为int类型(Integer类):public static  int parseInt(String s)throws NumberFormatException
2、String变为double类型(Douuble类):public static double parseDouble(String s)throws NumberFormatException
3、String变为Boolean类型(Boolean类):public static void parseBoolean(String s)

举例:我们将我们的字符串变为int型和我们的double类型

public class StringTest {
    public static void main(String[] args) {
        String str="123";
        int num=Integer.parseInt(str);
        System.out.println(num);
        Double num1=Double.parseDouble(str);
        System.out.println(num1);
    }
}

我们的运行结果是:

123
123.0

需要注意的是,将字符串转为数字的时候,字符串的组成有非数字,那么就会出现我们的转换错误。
范例:观察非数字错误:

  String str2="12344aab";
 double num3=Double.parseDouble(str2);
        System.out.println(str2);

而字符串与boolean转换就不受此影响:

String str2="12344aab";
        boolean num2=Boolean.parseBoolean(str2);
        System.out.println(num2);

那么如果现在要将基本数据类型变为字符串
1、任何数据类型使用了“+”链接空白字符串就变为了字符串类型
2、使用String类中提供的valueOf()方法,此方法不产生垃圾。

String str1=String.valueOf(100);
        System.out.println(str1);

我们在以后的开发之中会经常用到字符串类型与基本数据类型之间的转换,所以这些操作我们要烂熟于心。

猜你喜欢

转载自blog.csdn.net/bailerong123/article/details/89165026