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

news2024/9/19 10:37:54

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

在这里插入图片描述


每博一文案

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

文章目录

  • Java : 详解八种基本数据类型的包装类
    • 每博一文案
    • 1. 八种基本数据类型的包装类
      • 1.2 为什么要引入 “包装类”
      • 1.3 为什么需要两种类型
    • 2. 基本数据类型 ——> 包装类
    • 3. 包装类 ——> 基本数据类型
    • 4. 自动拆箱 和 自动装箱
    • 5. String ——> 包装类,基本数据类型
    • 6. 基本数据类型 ——> String
    • 7. 总结:
    • 8. 最后:


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. 最后:

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/99919.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Rabbitmq与交换机

目录 一、交换机简介 1、Exchange(交换机)的作用 2、Exchange(交换机)的类型 3、交换机的属性 二、交换机的使用 1、创建项目 2、给子模块添加依赖( rabbitmq-provider、 rabbitmq-consumer) 3、直连交换机(Direct Exchange)使用 4、主题交换机(Topic Exchange)的使用 5、…

【图像分割】和声搜索算法图像多级阈值分割【含Matlab源码 2044期】

⛄一、和声搜索算法的图像阈值寻优算法简介 苹果图像识别是指将苹果果实从枝叶、土壤、天空等背景中分离出来, 即图像分割。最大类间方差法 (OTSU算法)是由日本学者大津展之 (OTSU) 提出的全局阈值选取方法。该方法存在缺乏自适应性、易造成噪声干扰和过分割现象、运算需要大量…

[附源码]计算机毕业设计Python的项目管理系统(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

Kafka 安装 快速入门

Kafka 安装 快速入门 Apache Kafka是流行的用于大规模收集、处理、存储和分析数据的开源流处理系统。它以其卓越的性能、低延迟、容错和高吞吐量而闻名,能够每秒处理数千条消息。常用来构建数据管道、利用实时数据流、实现系统监控、数据集成。 如上图,…

【MindStudio训练营第一季】基于MindX的U-Net网络的工业质检实践作业

1.1 作业介绍 1.1.1 作业背景 随着新一轮科技革命和产业变革的加速演进,全球各国都在借助新技术推动制造业升级,从工业2.0自动化开始兴起,到工业3.0信息化普及,如今正迈向工业4.0智能化。借助IoT、工业大数据、人工智能等先进技…

“==” 操作符 与 equals 方法的区别,toString

“” 操作符 与 equals 方法的区别,toString 每博一文案 读过这样一段话:很多人都羡慕我的坚强独立,夸赞我的善解人意。无论什么事情, 我都会把别人放在首位,宁愿自己吃亏,也会尽力满足别人的需求&#xf…

Allegro关闭线段显示不连续效果操作指导

Allegro关闭线段显示不连续效果操作指导 用Allegro进行PCB设计的时候偶尔会出现线段不连续的情况,尤其是在线段拐弯处,实际上并不是线段没有连接上,只是一个显示效果而已,如下图 如何去关闭这个显示效果,具体操作如下 选择Setup-Design Parameter 选择Display 取消勾…

java中实现分页的常见几种方式

文章目录1. 前言2. 先说结论3. 例子1. 数据库SQL的限制条件(limit、fetch)2. 使用List集合的截取功能实现3. 插件PageHelper1. 前言 无论是自我学习中,还是在工作中,固然会遇到与前端搭配实现分页的功能,发现有几种方式&#xff…

IIC总线(二)-----IIC控制器与MPU6050

1.Exynos_4412下的IIC控制器 Exynos 4412 SCP简化指令集计算机(RISC)微处理器支持四个多主控间集成电路(I2C)总线串行接口。为了在连接到I2C总线的总线主机和外围设备之间传输信息,我们使用了一条专用的串行数据线&am…

IO流(一)

IO流的思维导图如下所示: 我们下来对文件、IO流原理及流的分类,节点流(访问文件的、访问数组的、访问管道的)和处理流(缓冲流、对象流、管道流),输入流(InputStream和Reader)和输出流…

[附源码]Nodejs计算机毕业设计基于协同过滤技术的旅游景点购票系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分…

Python+Selenium自动化测试详细教程

前言 PythonSelenium 来实现的web端自动化, 以下演示会用到禅道、百度和自己编写的html. 一、准备工作 1、安装 安装Python 3安装selenium库,命令:pip install selenium搭建禅道环境 2、导入浏览器驱动 selenium操作不同的浏览器,需要下…

Windows10 系统下载网址推荐(二)

Windows10 系统下载网址推荐(二)1. 计算机操作系统概述2.HelloWindows3. 山己几子木4. xitongku5. TechBench结束语1. 计算机操作系统概述 操作系统(Operating System,OS)是一组主管并控制计算机操作、运用和运行硬件…

设计一个接口务必考虑好这14个基本点

目录:导读 前言 1、入参合法性校验 2、接口的版本控制 3、接口考虑幂等性 4、接口考虑防止重复请求 5、提高接口的响应时间 6、接口限流控制 7、黑白IP白名单 8、敏感数据脱敏 9、请求接口的先决条件-token 10、记录接口请求日志 11、调用第三方接口要考…

分解优化react对redux的基础使用

之前写了 react18 通过redux 做一个简单的状态管理基站 但代码确实相对比较乱 这次进行一些小封装和分解 优化一下管理质量 首先 我们创建一个 react项目 然后在项目中引入 npm install redux --save在src目录下创建 reducers 文件夹 下面创建 counter.js counter.js 参考代码…

有什么免费python安装包?

前言 Python的安装涉及到:Python编辑器、Python解释器、Python包管理工具(pip)。因此,首先我们要搞清楚这三个东西都是啥。 Python编辑器 正如在电脑上编辑文档需要用Word、处理数据需要用Excel、做演示文稿需要用PPT、修图需要…

git add 命令详解

1. 前言 2. git add 基本操作 3. git add 命令参数 4. git add 背后做了什么 1. 前言 众所周知,git 中有工作区、暂存区、版本库三大组成部分 工作区: 电脑中能看到的目录,也就是写代码的地方 暂存区: 英文叫 stage 或 index。一般存放在 .git 目录下…

【图像分割】灰狼算法最小交叉熵多阈值图像分割【含Matlab源码 903期】

⛄一、最小交叉熵多阈值图像分割简介 1 单阈值分割 设有两个概率分布P{p1, p2, …, pN}和Q{q1, q2, …, qN}, 交叉熵度量它们之间的信息量差异。其对称形式为 交叉熵既可看成是采用P取代Q作为单个系统概率分布时系统信息量变化的期望值, 也可看成是两个概率系统P和Q之间的信息…

CSAPP-Lab5 CacheLab解析

Review Cache Struct A cache is a set of 2s2^s2s cache setsA cache set is a set of E cache lines if E1, it is called “direct-mapped” Each cache line stores a blockTotal Capacity S * B * E 由此,我们可以写出cache line和cache的结构: …

微服务框架 SpringCloud微服务架构 服务异步通讯 50 消息可靠性 50.4 失败重试机制 50.4.1 消费者失败重试

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 服务异步通讯 文章目录微服务框架服务异步通讯50 消息可靠性50.4 失败重试机制50.4.1 消费者失败重试50 消息可靠性 50.4 失败重试机制 50…