【Java探索之旅】解密Java中的类型转换与类型提升

个人头像
🎥 屿小夏 : 个人主页
🔥个人专栏 : Java编程秘籍
🌄 莫道桑榆晚,为霞尚满天!

文章目录

  • 📑前言
  • 一、类型转化
    • 1.1 自动类型转换(隐式类型转换)
    • 1.2 强制类型转换(显示类型转换)
  • 二、类型提升
    • 2.1 int与long
    • 2.2 byte与byte
    • 2.3 小结
  • 🌤️全篇总结

📑前言

在Java编程中,类型转换是一个重要的概念,尤其在不同数据类型之间进行赋值和运算时。本文将介绍Java中的自动类型转换和强制类型转换,以及类型提升的概念。通过本文的学习,您将深入了解Java中数据类型之间的转换规则,帮助您编写更加健壮和精确的Java程序。

一、类型转化

Java 作为一个强类型编程语言, 当不同类型之间的变量相互赋值的时候, 会有教严格的校验

int a = 10;
long b = 100L;
b = a; // 可以通过编译
a = b; // 编译失败

在Java中,当参与运算数据类型不一致时,就会进行类型转换。Java中类型转换主要分为两类:自动类型转换(隐
式) 和 强制类型转换(显式)。

1.1 自动类型转换(隐式类型转换)

自动类型转换即:代码不需要经过任何处理,在代码编译时,编译器会自动进行处理

特点:数据范围小的转为数据范围大的时会自动进行

System.Out.println(1024); // 整型默认情况下是int
System.Out.println(3.14); // 浮点型默认情况下是double
int a = 100;
long b = 10L;
b = a; // a和b都是整形,a的范围小,b的范围大,当将a赋值给b时,编译器会自动将a提升为long类型,然后赋值
a = b; // 编译报错,long的范围比int范围大,会有数据丢失,不安全
float f = 3.14F;
double d = 5.12;
d = f; // 编译器会将f转换为double,然后进行赋值
f = d; // double表示数据范围大,直接将float交给double会有数据丢失,不安全
byte b1 = 100; // 编译通过,100没有超过byte的范围,编译器隐式将100转换为byte
byte b2 = 257; // 编译失败,257超过了byte的数据范围,有数据丢失

1.2 强制类型转换(显示类型转换)

强制类型转换:当进行操作时,代码需要经过一定的格式处理,不能自动完成。特点:数据范围大的到数据范围小
的。

int a = 10;
long b = 100L;
b = a; // int-->long,数据范围由小到大,隐式转换
a = (int)b; // long-->int, 数据范围由大到小,需要强转,否则编译失败
float f = 3.14F;
double d = 5.12;
d = f; // float-->double,数据范围由小到大,隐式转换
f = (float)d; // double-->float, 数据范围由大到小,需要强转,否则编译失败
a = d; // 报错,类型不兼容
a = (int)d; // int没有double表示的数据范围大,需要强转,小数点之后全部丢弃
byte b1 = 100; // 100默认为int,没有超过byte范围,隐式转换
byte b2 = (byte)257; // 257默认为int,超过byte范围,需要显示转换,否则报错
boolean flag = true;
a = flag; // 编译失败:类型不兼容
flag = a; // 编译失败:类型不兼容

注意事项:

  1. 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型

  2. 如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失

  3. 将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查

  4. 强制类型转换不一定能成功,不相干的类型不能互相转换

二、类型提升

不同类型的数据之间相互运算时,数据类型小的会被提升到数据类型大的。

2.1 int与long

//int与long之间:int会被提升为long
int a = 10;
long b = 20;
int c = a + b; // 编译出错: a + b==》int + long--> long + long 赋值给int时会丢失数据
long d = a + b; // 编译成功:a + b==>int + long--->long + long 赋值给long

2.2 byte与byte

byte a = 10;
byte b = 20;
byte c = a + b;
System.out.println(c);
// 编译报错
Test.java:5: 错误: 不兼容的类型:int转换到byte可能会有损失
	byte c = a + b;
			^

byte 和 byte 都是相同类型, 但是出现编译报错. 原因是, 虽然 a 和 b 都是 byte, 但是计算 a + b 会先将 a和 b 都提升成 int, 再进行计算, 得到的结果也是 int, 这是赋给 c, 就会出现上述错误.由于计算机的 CPU 通常是按照 4 个字节为单位从内存中读写数据. 为了硬件上实现方便, 诸如 byte 和 short这种低于 4 个字节的类型, 会先提升成 int, 再参与计算。

//正确写法
byte a = 10;
byte b = 20;
byte c = (byte)(a + b);
System.out.println(c);

2.3 小结

  1. 不同类型的数据混合运算, 范围小的会提升成范围大的.
  2. 对于 short, byte 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算

🌤️全篇总结

本篇详细介绍了Java中的自动类型转换和强制类型转换的概念,以及类型提升的规则。在Java编程中,了解不同数据类型之间的转换规则是至关重要的,可以避免数据丢失和编译错误。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32CubeProgrammer + STLINK V2 烧录

发现使用STM32C8T6 STLINK V2 STM32CubeProgrammer无法成功烧录,总是报错 file error。至于原因,姑且参考:STLINK V2 无法用STM32CubeProgrammer下载程序-CSDN博客 解决方案: 烧录工具由STLINK换成OpenOCD。 stm32f1x.cfg # S…

1.Python是什么?——《跟老吕学Python编程》

1.Python是什么?——《跟老吕学Python编程》 Python是一种什么样的语言?Python的优点Python的缺点 Python发展历史Python的起源Python版本发展史 Python的价值学Python可以做什么职业?Python可以做什么应用? Python是一种什么样的…

NVMFS5A160PLZT1G汽车级功率MOSFET P沟道60 V 15A 满足AEC-Q101标准

关于汽车电子AEC Q101车规认证? 是一种针对分立半导体的可靠性测试认证程序,由汽车电子协会发布。这个认证程序主要是为了确保汽车电子产品在各种严苛的条件下能够正常工作和可靠运行。它包括了对分立半导体的可靠性、环境适应性、温度循环和湿度变化等…

VC考试系统-198-(代码+说明)

转载地址: http://www.3q2008.com/soft/search.asp?keyword198 1.1系统功能分析 1.1.1系统登录管理 1,选择教师登录:根据教师专用密码进行登录,完成题库的维护,对试题进行添加,删除,修改。并对…

品牌升级 | 图扑物联正式启用新LOGO

为进一步提升品牌形象,提高品牌影响力,2024年,我们迎来了一次重要的品牌升级——LOGO迭代。此次升级,在传承与创新中既保留了公司的核心精神,又融入了新的视觉语言,不仅代表了公司的新形象、新面貌&#xf…

20、设计模式之责任链模式(Chain)

一、什么是责任链模式 责任链模式属于行为型模式,在这个模式中,通常使用一条链来处理请求,该请求沿着链的顺序传递,直到有对象处理该请求为止,从而达到解耦请求发送者和请求处理者的目的。 二、组成 抽象处理器&#…

HTML超链接标签

文章目录 1. 作用2. 常用属性3. 模拟小米回到顶部 1. 作用 主要作用:实现页面的跳转。 2. 常用属性 href:指定要跳转到的 urltarget :跳转时在如何打开链接文档 _blank:在新窗口打开_self:在本窗口打开(…

案例分析篇13:系统分析与设计考点(2024年软考高级系统架构设计师冲刺知识点总结系列文章)

专栏系列文章推荐: 2024高级系统架构设计师备考资料(高频考点&真题&经验)https://blog.csdn.net/seeker1994/category_12593400.html 【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】(2024年软考高级系统架构设计师冲刺知识点总结-案例分析篇-…

Net Core 使用Mongodb操作文件(上传,下载)

Net Core 使用Mongodb操作文件(上传,下载) 1.Mongodb GridFS 文件操作帮助类。 GridFS 介绍 https://baike.baidu.com/item/GridFS/6342715?fraladdin DLL源码:https://gitee.com/chenjianhua1985/mongodb-client-encapsulati…

学习笔记-华为IPD转型2020:1,IPD的重要意义

华为产品开发转型:IPD计划 大多数公司发现,当公司大幅增长时,在较小规模上有效的管理实践不再有效。产品开发过程也是如此。随着华为的发展,该公司遇到了产品故障率更高、开发周期更长和研发成本增加等问题。然后,它转…

vulntarget-k - 内网渗透

标签 xxl-job rce Spring-Cloud-CVE-2022-22947 nacos auth bypass iox 靶机难度比较简单,都是用用 exp 就好了 拓扑图 网卡设置 首先需要使用虚拟网络编辑器,增加 VMnet1、VMnet2、VMnet3 对三张网卡设置子网 IP VMnet1 192.168.100.0 VMnet2 1…

BOOTMGR is missing 问题

同事一台win2k8的虚机在重启后无法引导开机,提示如下信息: 开始就觉得是引导分区设置错了。遂从网上下了一个winpe的镜像,装载到虚机“光驱”中,从光盘引导启动。打开“磁盘管理”后发现,果然,未安装系统…

【趣味学算法】03_兑换钱币

注: 本系列仅为个人学习笔记,学习内容为《算法小讲堂》(视频传送门),通俗易懂适合编程入门小白,需要具备python语言基础,本人小白,如内容有误感谢您的批评指正 要将 50 元的软妹币兑…

LeetCode——贪心算法(Java)

贪心算法 简介[简单] 455. 分发饼干[中等] 376. 摆动序列[中等] 53. 最大子数组和[中等] 122. 买卖股票的最佳时机 II[中等] 55. 跳跃游戏 简介 记录一下自己刷题的历程以及代码。写题过程中参考了 代码随想录的刷题路线。会附上一些个人的思路,如果有错误&#xf…

SAP 读写生产订单长文本简介

通常在物料主数据,生产订单,采购订单中都会维护长文本的信息在业务数据中。但是我们在获取长文本的时候需要调用函数才能获取到对应业务数据的长文本的信息。 我们以获取生产订单中的长文本为例 首先需要获取到这个长文本的文本对象,文本名,文本标识 我们可以通过后台表S…

【知识库系统】使用SpringSecurity进行身份认证

一、理论知识部分 SpringSecurity 的官网文档地址:SpringSecurity 这里以24年3月份的 6.2.2 版本为例,记录一下学习过程。 1. SpringSecurity 是基于 Servlet Filters 的,而 Servlet Filters 中的流程如下:首先由客户端 Client…

[LeetCode][LCR 194]二叉树的最近公共祖先

题目 LCR 194. 二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 例如,给定如下二叉树: root [3,5,1,6,2,0,8,null,null,7,4] 示例 1: 输入: root [3,5,1,6,2,0,8,null,null,7,4], p 5, q 1 输出: 3 解释: 节点 5 和节点 1 的最…

数据库系统概念(第二周 第一堂)

前言 本文的所有知识点、图片均来自《数据库系统概念》(黑宝书)、山东大学李晖老师PPT。不可用于商业用途转发。 回顾 上周最后一个知识点说到数据库三级模式结构,在这个结构里面我们设立了模式/内模式映像、内模式/外模式映像,主…

Python之闭包

一、概念 在函数嵌套的前提下,内层函数引用外层函数的变量(包括参数),外层函数又把内层函数当做返回值进行返回。 这个内层函数所引用的外层变量称为 “闭包” def test(): # 外层函数a 33 # 外部变量def test2(): # 内层函数print(a)return test2newFu…

网络计算机

TCP/IP四层模型 应用层:位于传输层之上,主要提供两个设备上的应用程序之间信息交换的服务,它定义了信息交换的格式,消息会交给下一层传输层来传递。我们把应用层交互的数据单元称为报文。应用层工作在操作系统的用户态&#xff0…