Java中基本数据类型的包装类,你都会了吗?

一、为什么要使用包装类?

在Java中,数据类型分为两大类,一类是基本数据类型,一类是引用数据类型。由于基本数据类型不是面向对象的,所以Java专门为八大基本数据类型提供了相对应的包装类。

我们将基本数据类型的值封装到相对应的类中,提供包装类的属性和方法,这样方便我们去操作对象。Java中有个容器叫做集合,由于集合只能存储对象类型,所以如果我们要将一些基本数据类型的数据存储到集合中,我们必须要使用基本数据的包装类。

二、八大基本数据类型对应的包装类
基本数据类型 包装类
byte Byte
short Short
char Character
int Integer
long Long
double Double
float Float
boolean Boolean

扩展:

int类型在作为类的属性时,默认值为0,其对应的包装类Integer在作为类的属性时,默认值为null(Integer是引用数据类型,所有引用数据类型在作为类属性时,默认值都是null)。

三、包装类学习(以Integer为例)

Integer类的定义

先来看一下Integer类的部分源码:

public final class Integer extends Number implements Comparable<Integer> {
    /**
     * A constant holding the minimum value an {@code int} can
     * have, -2<sup>31</sup>.
     */

通过查看源码可知,Integer类继承了Number类,实现了Comparable接口,也就是说,Number类中的方法可以被Integer类重写或调用,实现Comparable接口,说明Integer的对象具有比较大小的能力。

Integer类的两个构造方法

还是一样,先看一下Integer类的部分源码:

@Deprecated(since="9")
    public Integer(int value) {
        this.value = value;
    }
/**
  * 我把这里的注释给去掉了
  */
@Deprecated(since="9")
    public Integer(String s) throws NumberFormatException {
        this.value = parseInt(s, 10);
    }

构造方法:Integer(int value)
方法描述:该方法会构造一个新分配的Integer对象,它表示指定的int值

构造方法:Integer(String s)
方法描述:该方法也会构造一个新分配的Integer对象,它表示String参数所指示的int值

Integer类的两个属性

老规矩,看一下Integer类的部分源码:

@Native public static final int   MIN_VALUE = 0x80000000;
/**
  * 我又把这里的注释给去掉了
  */
@Native public static final int   MAX_VALUE = 0x7fffffff;

MIN_VALUE是一个常量,值为-2147483648,它表示int类型能够表示的最小值。

MAX_VALUE也是一个常量,值为2147483647,它表示int类型能够表示的最大值。

来一个实例:

package cn.tkr.demo;

public class Test {

    public static void main(String[] args) {

        //输出最小值、最大值
        System.out.println("最小值:" + Integer.MIN_VALUE);
        System.out.println("最大值:" + Integer.MAX_VALUE);

        //最小值减一,最大值加一
        System.out.println("最小值减1;" + (Integer.MIN_VALUE - 1));
        System.out.println("最大值加1;" + (Integer.MAX_VALUE + 1));

    }
}

运行结果:

最小值:-2147483648
最大值:2147483647
最小值减12147483647
最大值加1-2147483648

最小值减一变最大值,最大值加一变最小值,什么歪理?

这个理:

从源码中可以看出,最小值和最大值采用的都是十六进制的表达形式,十六进制的最小值0x80000000减1为0x7fffffff,刚好与最大值的十六进制表示形式相同,所以最小值减1后就是最大值。同理可得,最大值加1后就是最小值。

四、Integer类的常用方法

方法:toBinaryString(int i)
返回值类型:static String
描述:得到一个int类型值的二进制字符串表示形式

方法:toOctalString(int i)
返回值类型:static String
描述:得到一个int类型值的八进制字符串表示形式

方法:toHexString(int i)
返回值类型:static String
描述:得到一个int类型值的十六进制字符串表示形式

实例:

package cn.tkr.demo;

public class Test {

    public static void main(String[] args) {

        //将int类型的值转换成二进制、八进制、十六进制
        System.out.println(Integer.toBinaryString(12));
        System.out.println(Integer.toOctalString(240));
        System.out.println(Integer.toHexString(300));
    }
}

运行结果:

1100
360
12c

方法:toString()
返回值类型:String
描述:重写了Object类中的方法,表示该Integer值的String对象

方法:equals(Object obj)
返回值类型:boolean
描述:重写了Object类中的方法,用来比较两个Integer对象的值是否相等

方法:compareTo(Integer another)
返回值类型:int
描述:实现了Comparable接口中的方法,用来比较两个Integer对象的值的大小,返回值是-1、0、1

实例:

package cn.tkr.demo;

public class Test {

    public static void main(String[] args) {

        //创建两个对象a和b
        Integer a = new Integer(124);
        Integer b = new Integer("124");

        System.out.println(a.toString()); //调用toString方法
        System.out.println(b); //按正常输出的是地址值,但是Integer类重写了Object类的toString方法,所以输出的是字符串

        System.out.println(a==b); //比较的是地址值(这是两个不同对象,输出结果是false)
        System.out.println(a.equals(b)); //比较的是对象的值(输出true),

        Integer c = new Integer(100);

        System.out.println(a.compareTo(c)); //输出-1
        System.out.println(a.compareTo(b)); //输出0

    }
}

运行结果:

124
124
false
true
1
0

方法:valueOf(int i)
返回值类型:static Integer
描述:得到一个int类型值的Integer类型的对象

方法:valueOf(String s)
返回值类型:static Integer
描述:得到一个String类型所表示的Integer类型的对象

方法:intValue()
返回值类型:int
描述:得到一个int类型的Integer对象的值

方法:parseInt(String s)
返回值类型:static int
描述:得到一个String对象所表示的int类型的值

实例:

package cn.tkr.demo;

public class Test {

    public static void main(String[] args) {

        Integer i = new Integer(10);
        Integer a = Integer.valueOf(124);
        Integer b = Integer.valueOf("124");
        int c = i.intValue();
        int d = Integer.parseInt("123");

        System.out.println(a + "\n" + b + "\n" + c + "\n" + d);
    }
}

运行结果:

124
124
10
123
五、总结

以上是关于Java中基本数据类型的包装类,分享给大家。如果觉得还不错的话,就送我一个赞吧!如果本文对你有用的话,也欢迎收藏哦!

猜你喜欢

转载自blog.csdn.net/m0_47890251/article/details/106829852