Java包装类

xiaoxiao2021-02-28  25

    在Java中,为了更好的实现面向对象的特点,对八种数据类型(byte,boolean,short,char,int,long,float,double)都使用了类进行封装,这种类称之为包装类(Wrapper Class)。

在Java中,为了方便使用与开发,提供了包装类的两种使用类型 对象型(Object类的直接子类)数值型(Number类的直接子类)Boolean,Character(char)Byte,Short,Float,Integer(int),Double,Long 关于Number类     Number的定义以及Number类里定义的6种方法   Number类定义public abstract class Number implements java.io.Serializable int类型转换public abstract int intValue();long类型转换public abstract long longValue();float类型转换public abstract float floatValue();double类型转换public abstract double doubleValue();byte类型转换public byte byteValue();short类型转换public short shortValue()

装箱与拆箱

    在JDK1.5以前,一直使用的是手工的装箱与拆箱,我以int和Integer举例

Integer num = new Integer(100); int data = num.intValue(); System.out.println(data);

    在JDK1.5以后,Java提供了自动拆装箱的机制,因为这种机制的产生,在使用与开发中可以直接使用包装类的对象进行各种数学计算。我举一个自动拆装箱的例子:

Integer number = 100; System.out.println(number*4);

那么,在进行对象的比较时,必不可少的存在使用"=="和"equals"的使用问题。JDK1.5之后,使用自动装箱拆箱的时候,有一个大坑(我用代码来演示一下)

Integer y =120; Integer y1 = 120; Integer x = 130; Integer x1 = 130; System.out.println(y == y1); System.out.println(x == x1);

那么,一般来说这里的输出,应该是两个true对吧,但是,我们现在来看一下实际的输出

诺,这里在比较x和x1的时候输出了false,我来解释一下这一点:    

    对于 Integer var = ? 在 -128到127之间赋值的话,Integer对象是在IntegerCache.cache产生,这个时候我们可以理解成对象被入池了,所以会复用已有对象,所以,在这个区间内,我们可以用"=="来进行判断。但是,如果在这个区间以外的所有数据,存储的位置都会在堆上,并不会复用已有对象。所以在这里会输出false。

    所以,在阿里巴巴Java开发手册里有过规定:对于所有相同类型的包装类对象之间值的比较,规定使用equals进行判断。

接下来,既然有了Integer,那么int什么时候用呢?在阿里的编码规范中也有过相关的规定

    1:所有的POJO(Plain Ordinary Java Objects)类属性必须使用包装数据类型;

    2:RPC方法的返回值和参数必须使用包装数据类型;

    3:局部变量推荐使用基本数据类型;

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

    举个例子(将字符串转换为int型), 如果要转换的字符串中含有非数字,那么就会报错。

String str = "123"; int num = Integer.parseInt(str); System.out.println(num);我对于包装类的总结就到这里,后续还会有补充
转载请注明原文地址: https://www.6miu.com/read-2650059.html

最新回复(0)