Java基础——类型转化(强制转化)

news2024/11/28 18:12:20

目录

1.数字间的类型转换

(1) 隐式类型转换

(2)显式类型转换(强制类型转换)

2.类对象间的强制转换

(1) 向上转型

(2) 向下转型


将一个类型强制转换成另外一个类型的过程被称为类型转换。

1.数字间的类型转换

在Java中,数字类型之间的转换分为两大类:隐式类型转换(也称为自动类型转换)和显式类型转换(也称为强制类型转换)。

(1) 隐式类型转换

        隐式类型转换发生在较小的数据类型被赋值给较大的数据类型时,Java编译器会自动处理这种转换,而不需要程序员显式地指定。这种转换通常不会导致数据丢失,但可能会导致精度下降

示例 

 int a = 5;
long b = a; // 自动将int转换为long
double c = b; // 自动将long转换为double
(2)显式类型转换(强制类型转换)

        显式类型转换发生在程序员需要将一个较大的数据类型转换为较小的数据类型时,或者在不兼容的类型之间进行转换时。这种转换可能会导致数据丢失或溢出,因此必须显式地指定。

示例

double d = 9.78;
int e = (int)d; // 强制将double转换为int,结果为9(小数部分被丢弃)

long f = 123456789012345L;
int g = (int)f; // 强制将long转换为int,结果可能会导致数据溢出,因为int的范围比long小

        在上面的示例中,double转换为int会丢失小数部分,而将long转换为int可能会导致数据溢出,因为long类型的值范围比int大得多。

2.类对象间的强制转换

(1) 向上转型

        向上转型是指将子类对象转换为父类对象。这种转换是隐式的,因为父类对象可以引用任何子类对象,这是多态性的基础。

Parent parent = new Child(); // 隐式向上转型

即一个类的句柄可以指向自己类的对象或者自己的子孙后代类的对象

(2) 向下转型

        指的是将父类类型的对象引用强制转换为子类类型的对象引用。这种转换是有风险的,只有在确保父类对象实际指向的是子类实例时,才能安全地进行。

ParentClass parentObj = new ChildClass(); // 父类引用指向子类实例(多态)
ChildClass childObj = (ChildClass) parentObj; // 向下转型,前提是parentObj确实指向了ChildClass的实例

注意!!!

        如果父类引用没有指向子类实例,而是指向了另一个子类或者就是父类本身的实例,那么在进行向下转型时会抛出ClassCastException

ParentClass anotherParentObj = new ParentClass();
ChildClass anotherChildObj = (ChildClass) anotherParentObj; // 这会抛出ClassCastException,因为anotherParentObj不是ChildClass的实例

 向下转型常用于多态性场景中,当你想调用子类特有的方法或访问子类特有的属性时,就需要将父类引用转换为子类引用。

void process(ParentClass obj) {
    if (obj instanceof ChildClass) {
        ChildClass child = (ChildClass) obj;
        // 现在可以安全地调用ChildClass的方法或访问其属性
        child.childSpecificMethod();
    }
}

上述代码表示,当我们定义一个m1方法将类进行强制类型转换时,必须进行判断所传参数是不是强转类型的子类。

面试点:if(s instanceof Child3) 判断是否为子类,在进行向下转型之前,使用instanceof关键字进行检查。这可以确保只有在对象确实是目标子类类型时,才进行转换。避免异常发生。

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

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

相关文章

数据结构C语言描述5(图文结合)--广义表讲解与实现

前言 这个专栏将会用纯C实现常用的数据结构和简单的算法;有C基础即可跟着学习,代码均可运行;准备考研的也可跟着写,个人感觉,如果时间充裕,手写一遍比看书、刷题管用很多,这也是本人采用纯C语言…

23种设计模式-装饰器(Decorator)设计模式

文章目录 一.什么是装饰器设计模式?二.装饰器模式的特点三.装饰器模式的结构四.装饰器模式的优缺点五.装饰器模式的 C 实现六.装饰器模式的 Java 实现七.代码解析八.总结 类图: 装饰器设计模式类图 一.什么是装饰器设计模式? 装饰器模式&…

构建英语知识网站:Spring Boot框架解析

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

数据结构之数组与链表的差异

一、数组 数组(Array)是由相同类型的元素(element)的集合所组成的数据结构,分配一块连续的内存来存储。利用元素的索引(index)可以计算出该元素对应的存储地址。最简单的数据结构类型是一维数组…

RabbitMQ7:消息转换器

欢迎来到“雪碧聊技术”CSDN博客! 在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将…

Ubuntu20.04+ROS 进行机械臂抓取仿真:环境搭建(一)

目录 一、从官网上下载UR机械臂 二、给UR机械臂添加夹爪 三、报错解决 本文详细介绍如何在Ubuntu20.04ROS环境中为Universal Robots的UR机械臂添加夹爪。首先从官方和第三方源下载必要的软件包,包括UR机械臂驱动、夹爪插件和相关依赖。然后,针对gazeb…

(即插即用模块-Attention部分) 二十、(2021) GAA 门控轴向注意力

文章目录 1、Gated Axial-Attention2、代码实现 paper:Medical Transformer: Gated Axial-Attention for Medical Image Segmentation Code:https://github.com/jeya-maria-jose/Medical-Transformer 1、Gated Axial-Attention 论文首先分析了 ViTs 在训…

Git 进程占用报错-解决方案

背景 大仓库,由于开发者分支较多,我们在使用 git pull 或 git push 等命令时(与远端仓库交互的命令),不知之前配置了什么,我的电脑会必现以下报错(有非常长一大串报错-不同分支的git进程占用报…

【FPGA-MicroBlaze】串口收发以及相关函数讲解

前言 工具:Vivado2018.3及其所对应的SDK版本 目前网上有许多MicroBlaze 的入门教程,比如下面的这个参考文章,用串口打印一个hello world。 【FPGA】Xilinx MicroBlaze软核使用第一节:Hello World!_fpga软核microblaze-CSDN博客 个…

代码美学2:MATLAB制作渐变色

效果: %代码美学:MATLAB制作渐变色 % 创建一个10x10的矩阵来表示热力图的数据 data reshape(1:100, [10, 10]);% 创建热力图 figure; imagesc(data);% 设置颜色映射为“cool” colormap(cool);% 在热力图上添加边框 axis on; grid on;% 设置热力图的颜色…

Android下载出现open failed: EPERM (Operation not permitted)

今天帮忙给同事调一下apk,发现android 自动更新apk,下载apk的时候总是失败,总是卡在 输出流这一步了 于是第一步分析,立马想到权限 但是下载之前的读写内存的权限也都有了 什么android 10高版本的不开启分区存储也用了 android…

使用爬虫时,如何确保数据的准确性?

在数字化时代,数据的准确性对于决策和分析至关重要。本文将探讨如何在使用Python爬虫时确保数据的准确性,并提供代码示例。 1. 数据清洗 数据清洗是确保数据准确性的首要步骤。在爬取数据后,需要对数据进行清洗,去除重复、无效和…

uniapp中使用Mescroll实现下拉刷新与上拉加载项目实战

如何在UniApp中使用Mescroll实现下拉刷新与上拉加载 前言 下拉刷新和上拉加载更多成为了提升用户体验不可或缺的功能。UniApp作为一个跨平台的应用开发框架,支持使用Vue.js语法编写多端(iOS、Android、H5等)应用。Mescroll作为一款专为Vue设…

【接口自动化测试】一文从0到1详解接口测试协议!

接口自动化测试是软件开发过程中重要的环节之一。通过对接口进行测试,可以验证接口的功能和性能,确保系统正常运行。本文将从零开始详细介绍接口测试的协议和规范。 定义接口测试协议 接口测试协议是指用于描述接口测试的规范和约定。它包含了接口的请求…

RAG数据拆分之PDF

引言RAG数据简介PDF解析方法及工具代码实现总结 二、正文内容 引言 本文将介绍如何将RAG数据拆分至PDF格式,并探讨PDF解析的方法和工具,最后提供代码示例。 RAG数据简介 RAG(关系型属性图)是一种用于表示实体及其关系的图数据…

【开源项目】2024最新PHP在线客服系统源码/带预知消息/带搭建教程

简介 随着人工智能技术的飞速发展,AI驱动的在线客服系统已经成为企业提升客户服务质量和效率的重要工具。本文将探讨AI在线客服系统的理论基础,并展示如何使用PHP语言实现一个简单的AI客服系统。源码仓库地址:ym.fzapp.top 在线客服系统的…

WEB攻防-通用漏洞XSS跨站MXSSUXSSFlashXSSPDFXSS

演示案例: UXSS-Edge&CVE-2021-34506 FlashXSS-PHPWind&SWF反编译 PDFXSS-PDF动作添加&文件上传 使用jpexs反编译swf文件 上传后,发给别人带漏洞的分享链接

QSqlTableModel的使用

实例功能 这边使用一个实例显示数据库 demodb 中 employee 数据表的内容,实现编辑、插入、删除的操作,实现数据的排序和记录过滤,还实现 BLOB 类型字段 Photo 中存储照片的显示、导入等操作,运行界面如下图: 在上图中…

适用于学校、医院等低压用电场所的智能安全配电装置

引言 电力,作为一种清洁且高效的能源,极大地促进了现代生活的便捷与舒适。然而,与此同时,因使用不当或维护缺失等问题,漏电、触电事件以及电气火灾频发,对人们的生命安全和财产安全构成了严重威胁&#xf…

LabVIEW实现UDP通信

目录 1、UDP通信原理 2、硬件环境部署 3、云端环境部署 4、UDP通信函数 5、程序架构 6、前面板设计 7、程序框图设计 8、测试验证 本专栏以LabVIEW为开发平台,讲解物联网通信组网原理与开发方法,覆盖RS232、TCP、MQTT、蓝牙、Wi-Fi、NB-IoT等协议。 结合…