Java : 详解八种基本数据类型的包装类

Java : 详解八种基本数据类型的包装类

在这里插入图片描述


每博一文案

人生路漫漫越长大,越明白每个人的路都是漫长而艰辛的。无论我们有多累,我们都无路可退。
就像马丁说的那样:每一个强大的人都曾咬着牙度过一段,没人帮忙,没人支持,没人嘘寒问暖的日子。
过去了,这就是你的成人礼,过不去,求饶了,这就是你的无底洞,我们都要熬过一段灰暗,孤独,无人能懂得岁月,别无他法,谁也无法
逃避,蔡康曾说,人生前期越是嫌麻烦,越是懒的学习,后来就越可能错过让你心动的人和事。
错过风景,生活有太多的磨难和挫折,跌宕起伏,但那些打不倒我们的,将会让我们变得更加强大,尝遍人间百味的我们将会更加生动而干劲。
虽然很累,但当我们沉住气,会发现所有的经历都是成长的印记,经历过大浪淘沙的洗礼后,
人生会多一份坚强与淡然,世间从没有净土,但我们可以为自己造一方乐园。
有时候生活不会立即给我们答案,我们要拿出耐心等待,即便空谷喊话,也要等一会儿才能听见绵长的回音。
有人说,那些让你遍体鳞伤的地方,终会长成你最坚强之处,无论这是一路雨雪,泥泞,还是鲜花掌声,都是独一无二的,都构成了
精彩的人生。
愿你在最孤独的时候,也能一个人勇敢的赶路,带着微笑,接住生活中的每一个挑战。
                                                  ——————   一禅心灵庙语


1. 八种基本数据类型的包装类

Java 提供了 8 种基本数据类型对应的包装类,使得基本数据类型变量具有类的特征。

因为有的方法的参数是:类对象,所以对应的基本数据类型也就无法传递了。

同时基本数据类型不是类,无法继承Object的父类,更无法调用其中的方法。

Java是面向对象编程了,而基本数据类型却没有类,就失去了面对对象的特性。

有了类的特点,就可以调用类中的方法,Java才是真正的面向对象

如下是八大基本数据类型所对应的包装类

这八大基本数据类型的包装类的父类是 Number ,都继承于它,对于这八大包装类,大家只需要记住两个特殊的 : int --> Integer,char --> Character 其余的都是原先基本数据类型上的首字母 大写

基本数据类型包装类
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
booleanBoolean
charCharacter

1.2 为什么要引入 “包装类”

假设有这样的一个方法:它的形式参数是 Object 类型的,它只能接受所有 引用 数据类型,因为 Object 类是所有类的父类,不能接受基本数据类型。这个时候,我非要传一个 int 类型的数据进去,该怎么办???

假设有这样一个方法:它的形式参数是Object型
它能接收所有引用数据类型,因为Object类是所有类的父类,不能接受基本数据类型。
如果我想传一个int型数字进去,该怎么解决?

这时候我们就需要使用一个自己定义一个包装类,用于存储你要传递的 int 类型的数据信息。

自己为一个数据类型封装一个类。

具体代码如下:

package blogs.blog1;

public class simulateInt {
    public static void main(String[] args) {
        int num = 100;
        // 将定义好的 int 100 封装传入到自定义的包装类当中去

        MyInt myInt = new MyInt(num);
        // 传入定义好的 int 类型的包装类
        disPlay(myInt);
    }


    // 该方法的形参只接受引用类型
    public static void disPlay(Object object) {
        System.out.println(object.toString());
    }

}


// 自己定义的包装类,用于存储 int 基本数据类型的
class MyInt {
    private int num;

    public MyInt() {
    }

    public MyInt(int num) {
        this.num = num;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }


    @Override
    public String toString() {
        return "int类型的包装类: " +
                "num=" + num +
                '}';
    }
}


在这里插入图片描述

为了解决这个需求问题,java为八大数据类型提供了包装类,就不需要自己定义,创建了。


1.3 为什么需要两种类型

在Java语言中,一些都是以类和对象来设计的,所有的数据类型都是引用类型(指向内存当中某个对象的地址)创建一个对象后会存储在 里,然后通过栈的引用来使用对象 (堆中存放具体内容,栈中存放对象的地址)。但是对于一些经常用到的一系列 如:int ,float,double ,如果每次都创建出来,存放堆里就会变的不是很有效率,所以就出现了基本类型,直接将变量存储在栈中,不用创建 new 关键字来创建,可以变得更加高效。

而基本数据类型不具有对象的性质,为了让基本数据类型也具有对象的特征,就出现了 包装类 ,如果某个方法需要Object 类型的参数,而实际需要的值是 2,3等数值时,包装类就派上用场了,再比如使用 Collection 集合类型时,就一定要使用包装类,而不是基本数据类型。以及上述我所举例的。

**我们需要掌握 基本数据类型 ——> 包装类,包装类——> 基本数据类型,String ——> 基本数据类型,包装类,基本数据类型 ——> String **

在这里插入图片描述

2. 基本数据类型 ——> 包装类

使用 new 创建类的方式,创建包装类,将需要转换为 包装类的数值,传入对应包装类的构造方法调用赋值,可以是对应的数值,也可以是对应数值的字符串。

public class simulateInt {

    // 基本数据类型 --> 包装类
    public static void main(String[] args) {
        int num1 = 100;
        Integer i1 = new Integer(num1);      // 将 int 转换为 Integer 包装类
        Integer i2 = new Integer("999");  // 字符串也是可以的
        System.out.println(i1);
        System.out.println(i2);

        float f1 = 23.8f;  // 因为小数默认是 double 类型的
        Float f2 = new Float(f1);    // 将 float 转换为 Float 的包装类
        Float f3 = new Float("3.14");  // 字符串也是可以的。
        System.out.println(f2);
        System.out.println(f3);
    }
}

在这里插入图片描述


特殊的如果对于 int, long, float ,double 类型的包装类,new 时传入的形参是 带有字母/特殊字符(‘123abc’)的是会报错: NumberFormatException异常(在Java中对字符串和数字直接进行类型转换的报错)

如下:

public class simulateInt {
    // 基本数据类型 --> 包装类
    public static void main(String[] args) {
        Integer integer = new Integer("123abc");  // 报错 字符无法转换: NumberFormatException
        System.out.println(integer);
    }
}

在这里插入图片描述


特殊的对于 int, long, float ,double 类型的包装类,new 时传入的形参是 null 是会报错的:NumberFormatException: null空异常

public class simulateInt {

    // 基本数据类型 --> 包装类
    public static void main(String[] args) {
        Integer integer = new Integer(null);
        System.out.println(integer);
    }
}

在这里插入图片描述


特殊的对于 boolean 值的 包装类所传入的形参,如果不是 指定的 true / false 的字符串,有一个校验的操作,会将不是对应 true/false 的内容一律(包括 null 值) 置为 false 赋值上,如下

public class simulateInt {

    // 基本数据类型 --> 包装类
    public static void main(String[] args) {
        Boolean b = new Boolean("true hhh");
        System.out.println(b);
        Boolean b2 = new Boolean(null);
        System.out.println(b2);
    }
}

在这里插入图片描述


其中 Boolean 校验的源代码如下:

public Boolean(String s) {
    this(parseBoolean(s));
}

public static boolean parseBoolean(String s) {
    return ((s != null) && s.equalsIgnoreCase("true")); // 如果返回的不是null,或者不是 true,都返回false;
}

3. 包装类 ——> 基本数据类型

将包装类 转换为 对应的基本数据类型,使用 包装类.xxxValue()的方法,其中 xxx表示你要转换的是什么基本数据类型,如 intValue(),doubelValue()

如下代码:

public class simulateInt {
    // 包装类   ————> 基本数据类型
    // 使用 包装类的xxxValue()方法
    public static void main(String[] args) {
        Integer i1 = new Integer(18);
        int num = i1.intValue();
        short num2 = i1.shortValue();
        double d = i1.doubleValue();

        System.out.println(num);
        System.out.println(num2);
        System.out.println(d);

    }
}

在这里插入图片描述


4. 自动拆箱 和 自动装箱

JDK5之后,支持自动装箱,自动拆箱。但类型必须匹配。

  • 自动拆箱: 自动将包装类 自动转换为 ——> 基本数据类型
  • 自动装箱: 自己将基本数据类型 自动转换为 ——> 包装类

如下代码:

public class simulateInt {

    // 自动拆箱 和 自动装箱
    public static void main(String[] args) {
        int num = 10;
        Integer i1 = num;  // 自动装箱 : 将基本数据类型 转换为 包装类
        System.out.println(i1 + 1);
        System.out.println(i1.toString());

        int num2 = i1;     // 自动拆箱:将包装类转换为 基本数据类型
        System.out.println(num2 + 1);
//        num2.toString;  不是类无法点出

        Boolean b = true;  // 自动装箱
        System.out.println(b);
        boolean b2 = b;    // 自动拆箱
        System.out.println(b2);
    }
}

在这里插入图片描述


5. String ——> 包装类,基本数据类型

对于将String 类型转换为 包装类,基本数据类型。

使用 包装类.parseXxx(字符串)的方法 其中的 xxx 表示要转换的 基本数据类型如: Double.parseDouble(字符串),Integer.parseInt(字符串)

转换为了包装类,还是基本数据类型都是一样的,因为 jdk5 可以自动拆箱和装箱

错误转换,不要使用”强制类型转换“ 字符串是无法直接强制转换为 对应的 基本数据类型的。

public class simulateInt {
    // String 转换为 包装类/基本数据类型
    // 使用 包装类.pasexxx()
    public static void main(String[] args) {
        String str = "123";
        Integer integer = (Integer)str;  // 报错,字符串无法直接转换为基本数据类型
    }
}

在这里插入图片描述


正确的转换:

public class simulateInt {
    // String 转换为 包装类/基本数据类型
    // 使用 包装类.pasexxx()
    public static void main(String[] args) {
        // 整数
        String str = "123";
        Integer integer = Integer.parseInt(str);
        System.out.println(integer.toString());
        int num = Integer.parseInt(str);
        System.out.println(num);

        // 浮点数
        String str2 = "3.1415926";
        Double d = Double.parseDouble(str2);
        System.out.println(str2.toString());
        double d2 = Double.parseDouble(str2);
        System.out.println(d2);

    }

在这里插入图片描述


特殊的对于使用 Boolean 包装类如果传入的不是对应的 true/false ,一律返回的是 fasle

public class simulateInt {
    public static void main(String[] args) {
        String str = "true";
        Boolean b = Boolean.parseBoolean(str);
        System.out.println(b.toString());
        boolean b2 = Boolean.parseBoolean(str);
        System.out.println(b2);

        String str2 = "true hello";
        Boolean b3 = Boolean.parseBoolean(str2);  // 不是 true/false 一律false返回 
        System.out.println(b3.toString());
        boolean b4 = Boolean.parseBoolean(str2);
        System.out.println(b4);


    }
}

在这里插入图片描述


6. 基本数据类型 ——> String

将基本数据类型 转换为 String 的方式有两种

  1. 使用 "+" 拼接上一个字符串,自动提升转换
  2. 调用 String 重载的 字符串.valueOf() 的方法,需要注意的是这是:在字符串的类型的方法。

**方式一: 使用 + **

public class simulateInt {
    // 方式一: 使用 "+" 拼接上
    public static void main(String[] args) {
        int num1 = 10;
        String str = num1 +"";
        System.out.println(str);
    }
}

在这里插入图片描述


方式二:使用 字符串.valueOf()

public class simulateInt {
    // 将基本数据类型转换为字符串: 使用字符串.valueOf()的方法
    public static void main(String[] args) {
        int num = 12;
        String str1 = String.valueOf(num);  // 将 int 转换为 String
        System.out.println(num);

        float f = 3.1415926f;
        String str2 = String.valueOf(f);    // 将 float 转换为 String
        System.out.println(str2);

        Double d = new Double(3.14);
        String str3 = String.valueOf(d);   // 将包装类Double 转换为 String
        System.out.println(str3);


    }
}

在这里插入图片描述


7. 总结:

  1. 八种基本数据类型对应的包装类,int --> Integer , char --> Character
  2. 在Java当中字符串 String 和 数字直接进行类型转换的话,可能会遇到 NumberFormatException 异常
  3. 对应包装类,所传的参数不要是 null ,不然报 null异常
  4. 对应特殊的 Boolean 包装类,具有校验的功能,如果所赋的值/传形参 不是 true/false,这两者一律返回 false 包括 null
  5. jdk5 以后 支持 自动拆箱,自动装箱
  6. 如下 基本数据类型 ——> 包装类,包装类 ——> 基本数据类型,String ——> 包装了,基本数据类型,基本数据类型 ——> String的示图

在这里插入图片描述


8. 最后:

限于自身水平,其中存在的错误,希望大家可以给予指教,韩信点兵——多多益善,谢谢大家,后会有期,江湖再见!!!

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值