Java中的隐式转换和强制转换底层是怎么做的?
目录
1. 回顾数值型基本数据类型共有哪些?
2. 什么时候进行隐式类型转换?
3. 数据类型的隐式转换规则
4. 特殊隐式转换规则需牢记
5. 隐式转换小练习
5.1 byte 与 byte 如何转?
5.2 int,long,double 的转换
5.3 byte,short,long 的转换
6. 强制转换如何转换?
7. 强制转换有哪些问题?
1. 回顾数值型基本数据类型共有哪些?
如下图所示,6种数值型和字符型都属于是基本数据类型的范畴,他们的关系图如下所示。
对于八种基本数据类型而言,我们通常会在6种数值型的的数据之间做算术运算,它们之前的取值范围大小如图所示
2. 什么时候进行隐式类型转换?
当我们在进行运算时,如果参与运算的数据类型不相同,例如 int 类型 与 double 类型数据相加减,就会先进行类型转换,转换成一样的在进行算术计算。
3. 数据类型的隐式转换规则
当取值范围小的和取值范围大的进行运算时,小的会先提升为大的,然后再进行计算。
4. 特殊隐式转换规则需牢记
刚才我说到了,当取值范围小的和取值范围大的数据进行运算时,小的会先转化成大的,然后再进行计算;但是 byte,short,char 这三种数据类型它们之间在进行算数运算时,都会先统一转换成 int 类型,然后再进行计算,而不是转换成它们三个之中数据类型最大的,这一点需要格外注意。
5. 隐式转换小练习
5.1 byte 与 byte 如何转?
如下所示代码,问下方运算之后得到的数据类型是什么样的?
byte b1 = 10;
byte b2 = 20;
数据类型 result = b1 + b2;
显而易见,通过我上面第四点的说明,这一点不难得出,byte 与 byte 做运算,会先统一转换为 int 类型,所以最终得到的数据类型是 int 。
5.2 int,long,double 的转换
如下所示,定义三个分别为 int,long,double类型的数据做运算,得出的结果是什么类型呢?
int a = 10;long b = 20L;double c = 30;数据类型 result = a + b + c;
首先我们要知道一点,运算时从左往右计算的,所以我们要一步一步的看。
先看 a + b,int 类型 与 long 类型相加,int 会转换为 long 类型,所以 a + b之后得出的数据类型是 long;
然后 long 再与 double 做相加,long 类型会转换为取值范围更大的 double 类型,所以最后得出的数据类型是 double。
5.3 byte,short,long 的转换
如下所示,定义了三个分别为 byte,short,long 类型的数据做运算,得出的结果是什么类型?
byte a = 10;short b = 20;long c = 30L;数据类型 result = a + b + c;
还是和刚才一样,byte 与 short 先做运算,会统一转换为 int 类型,int 类型再与 long 类型做运算,int 会先转换为 long 类型,所以最后得出的数据类型应该是 long 类型。
6. 强制转换如何转换?
在 Java 种,原则是是不允许把一个取值范围大的数据赋值给取值范围小的数据。如果一定要这么做,就需要进行强制转换。
强制转换的格式也很简单,如下图所示,我们只需要在被墙砖的数据前面括号内写入希望转换成的数据类型即可。
7. 强制转换有哪些问题?
强制转换有可能会导致数据发生错误。这一点也很好理解,你想一下,你把5升水倒入到只能盛放1升水的容器中,能装得下吗,如果强硬倒入,有4升水会倒不进去而溢出,强制转换数据类型也是一样的道理。
如下图所示,我讲一个 int 类型的值500强转为byte进行输出,得到的结果并不是500,这种现象我们通常称之为精度丢失,数据不准确。
之所以会出现这种情况,是因为500已经超出了byte 的最大值,在强转的时候会出现数据溢出,出现精度不准确。
如果我们把上面的 int = 500 改为 byte 范围内的任意值,我这里改为 50,再去做强转,就不会出现数据不准确,如下所示
所以说,强转可以转,但有可能会导致转换后的数据不准确,因此在实际使用的时候要考虑好后果,如果能确定墙砖之后数据不会发生溢出导致数据不准确,就可以做强转操作。
相关文章:
Java中的隐式转换和强制转换底层是怎么做的?
目录 1. 回顾数值型基本数据类型共有哪些? 2. 什么时候进行隐式类型转换? 3. 数据类型的隐式转换规则 4. 特殊隐式转换规则需牢记 5. 隐式转换小练习 5.1 byte 与 byte 如何转? 5.2 int,long,double 的转换 5.…...
Hbuilder本地调试微信H5项目(一)
摘要 通过内网穿透,访问本地Hbuilder创建的Vue项目 前置准备 下载并安装【HBuilder】,本文用的是HBuilder3.8.12版本,下载地址 下载并安装【微信开发者工具】,本文用的是1.06版本,下载地址 下载并安装【natapp】&a…...
OPC DCOM快速配置
目录 1 老系统配置 1.1 移除Windows 安全 1.2 建立相互能识别的用户账号 1.3 配置系统宽泛的DCOM设置 1.4 配置Server的特殊DCOM设置 1.5 恢复Windows安全 1 老系统配置 远程OPC访问必须在服务器和客户端两端配置DCOM。本文讲述如何正确配置 DCOM 的步骤并保证安全。 新…...
软件设计模式
1.UML 1.1类图表示法 uml类图中,类使用包含类名、属性、方法 属性或方法前的加好和减号表示了这个方法的可见性,可见性的符号有三种: 表示public -表示private #表示protected 1.2 类与类之间关系 关联关系 单向关联 双向关系 自关联 聚合关…...
Git常见场景命令总结
1、查看远程仓库标签/分支 git ls-remote --tags origin git ls-remote --heads origin2、删除远程仓库标签/分支 git push origin --delete refs/tags/my_tag3、删除本地标签/分支 git branch -d <branch_name>4、修改代码但未add回滚 git checkout -- <file1>…...
面向对象的分析与设计(精品课程)第一章作业
面向对象的分析与设计(精品课程)第一章作业 一. 单选题(共2题,18分)二. 多选题(共3题,27分)三. 填空题(共5题,45分)四. 简答题(共1题&…...
要使用API接口获取淘宝电商平台的数据,您需要遵循以下步骤:
了解API文档和规范:首先,您需要了解淘宝电商平台的API文档和规范,以确定可用的接口和参数。您可以在淘宝开放平台的官方文档中找到这些信息。注册并获取API密钥:在使用API之前,您需要在淘宝开放平台注册并获取API密钥。…...
vue中动态style(如何动态修改伪元素样式)
vue中动态style(如何动态修改伪元素样式)_vue怎么在行内给伪元素加样式_爱上星星的鲸鱼的博客-CSDN博客...
碳当量及相关指数
声明 本文是学习GB-T 713.1-2023 承压设备用钢板和钢带 第1部分:一般要求. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件规定了承压设备用钢板和钢带的牌号表示方法、订货内容、尺寸、外形、重量、技术要求、检验 规则、…...
MySQL数据库入门到精通
介绍 终于将黑马程序员 MySQL数据库入门到精通,从mysql安装到mysql高级、mysql优化全囊括这个视频看完了,发现自己之前掌握的数据库知识只能算是个入门,现在将这个视频的笔记整理一下,方便复习。准备按基础篇,进阶篇&…...
【TA】OP-TEE demo学习
前言:工作原因接触Apple软件需要搭建TA环境,涉及到OP-TEE,学习一下 OP-TEE(Open Portable Trusted Execution Environment)是一个开放源代码的可信执行环境(TEE)软件框架。它提供了安全的执行环…...
什么是实时操作系统(UCOS简介)
uC/OS-III官网:Home Page - Weston Embedded Solutions 一、裸机与RTOS介绍 下面我将从不同方面阐述裸机与试试操作系统的区别,从而进一步介绍裸机和实时操作系统 定义: 裸机:裸机指的是没有任何操作系统或软件层的硬件系统。在…...
软考-操作系统
/4操作系统的作用 进程 进程的概念 进程是程序的一次执行过程,没有程序就没有进程 进程可有多个线程,线程可共享资源 进程的两个基本属性: 可拥有资源的独立单位可独立调度和分配资源的基本单位 线程可共享: 内存地址空间代码…...
【EasyExcel】excel表格的导入和导出
【EasyExcel】excel表格的导入和导出 【一】EasyExcel简介【二】EasyExcel使用【1】EasyExcel相关依赖【2】写Excel(1)最简单的写(方式一)(2)最简单的写(方式二)(3)排除模型中的属性字段(4&…...
Unity shader内置standard代码解析
最近有相关需求制作,所以这里编写一个文档,方便后续的流程查看。 下载源码 由于unity内置的shader是无法查看源码的,你需要去官网下载对应版本内置源码查看 在引擎下载那里,会有一个Built in Shaders,下载 打开以后…...
Redis 有序集合操作实战(全)
目录 ZADD 加入有序集 ZCARD 取成员数量 ZCOUNT 计算区间成员数量 ZINCRBY 运算 ZRANGE 取区间成员(升序) ZRANGEBYSCORE 按分值排序取成员 ZRANK 取成员排名 ZREM 移除成员 ZREMRANGEBYRANK 按位置区间批量移除 ZREMRANGEBYSCORE 按分值区间移除 ZREVRANGE 取区间成…...
化工DCS/SIS/MIS系统时钟同步(NTP服务器)建设
化工DCS/SIS/MIS系统时钟同步(NTP服务器)建设 化工DCS/SIS/MIS系统时钟同步(NTP服务器)建设 目前计算机网络中各主机和服务器等网络设备的时间基本处于无序的状态。 随着计算机网络应用的不断涌现,计算机的时间同步问…...
计算机网络工程师多选题系列——操作系统
得多选者得天下啊同志们! 摘录按照章节顺序,但事实上各章节习题有交叉。 1 操作系统 1.1 操作系统概论 操作系统的主要功能:进程管理、存储管理、文件管理、设备管理和用户接口。 操作系统的主要功能——设备管理:为用户程序提…...
matlab读写json文件
Background 通常,在matlab中使用mat文件进行数据存储。MAT文件是MATLAB中用来存储数据的二进制文件格式。MAT文件可以包含各种数据类型,包括数字、矩阵、向量、结构体、字符和函数等。但是,当和其他语言有交互时,mat文件会不太方便…...
数据治理-数据仓库环境
数据仓库环境包括一系列组织起来以满足企业需求的架构组件,从源系统流动到数据暂存区,数据可以在这里被清晰,当数据集成并存储在数据仓库或操作数据存储中时,可以对其进行补充丰富。在数据仓库中,可以通过数据集市或数…...
DevOps与CI/CD常见面试问题汇总
01 您能告诉我们DevOps和Agile(敏捷)之间的根本区别吗? 答:尽管DevOps与敏捷方法(这是最流行的SDLC[Software Development Life Cycle]方法之一)有一些相似之处,但两者在软件开发方面都是根本不同的方法。以下是两者之…...
OJ练习第178题——收集树中金币
收集树中金币 力扣链接:2603. 收集树中金币 题目描述 给你一个 n 个节点的无向无根树,节点编号从 0 到 n - 1 。给你整数 n 和一个长度为 n - 1 的二维整数数组 edges ,其中 edges[i] [ai, bi] 表示树中节点 ai 和 bi 之间有一条边。再给…...
uni-app打包iOS ipa文件后不上架App store为用户提供下载解决过程记录
写在前面,itms-services协议是什么 itms-services协议是苹果提供的一种让iOS应用在用户设备上无线安装或升级的协议。 具体来说: itms-services表示iOS应用无线安装服务的URL方案,格式为:itms-services://?actiondownload-manifest&urlMANIFEST_URL其中MANIF…...
MySQL学习系列(2)-每天学习10个知识
目录 1. INNER JOIN 和 ON 子句2. 死锁3. SELECT * 和 SELECT column1, column24. 数据库的视图5. MySQL的触发器类型6. MySQL表的备份和恢复7. MySQL存储引擎8. 索引优化9. MySQL中的子查询10. 使用连接(JOIN)从多个表中检索数据 👍 点赞&am…...
黑马JVM总结(十四)
(1)分代回收_1 Java虚拟机都是结合前面几种算法,让他们协同工作,具体实现是虚拟机里面一个叫做分代的垃圾回收机制,把我们堆内存大的区域划分为两块新生代、老年代 新生代有划分为伊甸园、幸存区Form、幸存区To 为什…...
vue项目升级webpack
vue项目升级webpack 目录 1. vue项目中影响webpack版本的是什么 2.理解package.json中库前缀^和~区别 3.升级webpack4到5操作 1. vue项目中影响webpack版本的是什么 答案是:vue/cli-service版本 2.理解package.json中库前缀^和~区别 x.y.z x代表大版本…...
ubuntu的root用户修改密码失败
解决如下: 查看文件属性是否有a或i lsattr /etc/group /etc/passwd /etc/shadow 移除a和i的属性权限 chattr -ai /etc/group /etc/passwd /etc/shadow 再次使用passwd进行修改密码,就成功了...
C++---链表
1、链表 1.1、链表的结构 每个链表开头都有一个头指针Head尾节点的指针域为NULL,用于判断此列表是否结束 如果一个链表开始就为NULL,那么该链表为空链表 链表中的先后不代表在真实内存中的位置,只是单纯的逻辑上关系 1.2、创建链表 我们首…...
Unity使用Mirror制作局域网的同步
1.脚本布置.参考tank那个demo制作 1.新建空物体,为管理脚本的物体:manager,挂载NetworkManager,kcpTransport,NetworkManagerHud. 2.设置玩家出生点,spawnPoint,设置好初始化的position的位置(*),挂载NetworkStartPosition的脚本 3.新建Player的预制体,挂载NetworkIdentity,Ne…...
算法 N皇后问题-(递归回溯)
牛客网 BM59. 解题思路: 行列、斜叉不在一条直线上。 命令行为 row, 列为col, row 从0开始递归直到最后一行,列从0开始遍历,直到最后一列,中间每一步记录或清除位置状态,状态分为 m1[col] 1, m2[row-col] 1, m3[r…...
windows2012系统怎么建设网站/网络推广是做什么工作的
场景说明研发同事让把某个double类型字段的值四舍五入保留2位小数,mysql中round(col,2)可以实现四舍五入并且保留2位小数,但是神奇的事情发生了:发现有的四舍五入是正确的,而有的不是我们想要的结果,如下:简…...
怎么自己学着做网站/谷歌广告推广
【缓冲流、转换流、序列化流、装饰者模式、commons-io工具包】第一章 缓冲流1.1字节缓冲流1.2字符缓冲流1.3实操--文本排序第二章 转换流2.1字符编码和字符集2.2编码引出的问题2.3InputStreamReader类2.4OutputStreamWriter类2.5实操--转换文件编码第三章 序列化3.1序列化和反序…...
隐藏网站开发语言/写文章免费的软件
全国各地交通管理部门与中国气象局公共气象服务中心、高德地图联合发布了《2018年春运安全出行指南》,依据历年春运期间高德地图交通大数据,融合高德地图位置大数据预测城市交通拥堵趋势以及出行趋势,为广大群众节假日出行提供科学的参考建议…...
地方网站全网营销/潍坊网站建设方案咨询
gllvm是wllvm的一个替代品,能够更快,并行地构建字节码。官方仓库有段时间没更新了,导致我在安装过程中出现了一些版本不兼容的问题。下面记录下安装过程,方便后人。 官方仓库:GitHub - SRI-CSL/gllvm: Whole Program …...
小学生摘抄新闻2024版四年级/贵港seo
多线程下模拟多窗口售票 还是挺有趣的,哈哈~~~ public class Test {public static void main(String[] args) {Ticket ticket new Ticket();//模拟三个售票窗口new Thread(ticket, "A").start();new Thread(ticket, "B").start();new Thread…...
昆山做网站怎么做/软件外包
字面值 字面值:可用字符串表示的值,可以通过<value>元素标签或value属性进行注入 基本数据类型及封装类、String等类型都可以采取字面值注入的方式 若字面值中包含特殊字符,可以使用<![CDATA[]]>把字面值包裹起来 在 Bean 的配置…...