Java 数据类型转换详解:隐式转换(自动转换)与强制转换(手动转换)

目录

前言

取值范围从小到大的关系:

隐式转换(自动转换)

📜示例 1:基本类型隐式转换

📜示例 2:算术运算中的类型提升

📜示例 3:byte、short 和 char 的自动转换

隐式转换支持的基本类型:

强制转换(显式转换)

📜示例 1:浮点数到整数的强制转换

📜示例 2:超出范围的强制转换

强制转换常见的类型:

复杂类型中的转换

📜示例 1:子类向父类的隐式转换(多态)

📜示例 2:父类向子类的强制转换

🔴类型转换中的注意事项

🌷结论🌷


🔺在 Java 编程中,数据类型转换是非常常见的操作,分为:

  • 🍃隐式转换(自动转换)
  • 🍃强制转换(手动转换)

🔺理解这些转换将帮助你更好地控制程序中的数据处理。本文将深入讲解这两类转换,并提供稍复杂一些的示例,帮助你逐步掌握这个概念。

前言

我们可以把不同类型的数据看作不同大小的容器。

🔺例如,把一杯水(较小的数据类型)倒进大水壶(较大的数据类型)很轻松,但把一大壶水倒进小杯子就不容易,可能会溢出。

🔖这就是 Java 中数据类型转换的本质:

  • 当我们从小容器倒入大容器时是安全的(隐式转换)
  • 而从大容器倒入小容器时需要特别小心(强制转换)。

🔖在学习之前,先了解一下Java基本数据类型的大小关系

取值范围从小到大的关系:

byte < short < int < long < float < double


隐式转换(自动转换)

🔺隐式转换是指在不需要显式声明的情况下,Java 自动将一种较小的类型转换为较大的兼容类型。

就像从小杯子往大水壶里倒水,不用担心溢出,Java 也能保证这种转换不会出现数据丢失

📜示例 1:基本类型隐式转换

int a = 50;
double b = a; // int 自动转换为 double
System.out.println(b); // 输出 50.0

解释:double 类型比 int 类型大,int 类型的 a 自动转换为 double 类型,Java 自动完成了这种安全的转换。

📜示例 2:算术运算中的类型提升

当你在表达式中混合使用不同类型的变量时,Java 会自动将较小类型提升为较大类型进行运算

int num1 = 10;
double num2 = 5.5;
double result = num1 + num2; // int 自动转换为 double
System.out.println(result); // 输出 15.5

解释: 在这个表达式中,num1int 类型,但由于 num2double,所以 num1 自动提升为 double 以便两者可以一起计算。

📜示例 3:byteshortchar 的自动转换

当涉及到 byteshort char 类型的运算时,这些类型会自动提升为 int,即使两者的值都很小。

byte b = 10;
short s = 20;
char c = 'A'; // 'A' 的 Unicode 值是 65int result1 = b + s; // byte 和 short 自动转换为 int
int result2 = b + c; // byte 和 char 自动转换为 intSystem.out.println(result1); // 输出 30
System.out.println(result2); // 输出 75 (10 + 65)

解释:在这两个例子中,byteshortchar 类型在运算过程中自动提升为 int 类型。

这是为了确保计算的准确性和避免可能的溢出问题。

隐式转换支持的基本类型:

  • byteshortintlongfloatdouble

  • charint

🔺这些转换都是安全的,不会导致数据丢失


强制转换(显式转换)

🔺强制转换 是一种显式的转换,当你需要将较大的数据类型转换为较小的数据类型时,必须手动完成。

就像将水壶里的水倒入杯子时需要小心控制。强制转换可能会导致精度丢失或数据截断

🔺转换格式:

目标数据类型 变量名 = (目标数据类型)被强转的数据;

📜示例 1:浮点数到整数的强制转换

double d = 9.99;
int i = (int) d; // 强制将 double 转换为 int
System.out.println(i); // 输出 9

解释: 在这个例子中,小数部分被丢弃了,因为 int 类型只能存储整数部分。这个过程是不可逆的,数据丢失是强制转换的常见问题。

📌拓展与注意:表达式强制转换,记得给表达式也加上括号,否侧计算机就会认为先强制转换d,再和a相加

double d = 9.99;
double a = 7.99;
int i = (int)(d + a); // 强制将表达式转换为 int
int j = (int) d + a;
System.out.println(i); // 输出 16
System.out.println(j); // 输出 16.99

📜示例 2:超出范围的强制转换

当一个数值超出目标类型的范围时,强制转换会导致意想不到的结果。比如从 long 转换为 int 时,如果数值超出了 int 的范围,结果就会出现溢出

long bigNum = 2147483648L; // 大于 int 最大值
int smallNum = (int) bigNum; 
System.out.println(smallNum); // 输出 -2147483648

解释: 因为 2147483648 超出了 int 的最大范围(2147483647),导致数值在转换时溢出,返回了一个负值。

强制转换常见的类型:

  • doublefloat

  • longint

  • intshort

  • floatbyte

这些强制转换可能会导致精度损失或者溢出,因此需要非常小心。


复杂类型中的转换

除了基本数据类型,Java 还支持对象之间的类型转换,但前提是它们必须属于同一个继承层次结构。在这种情况下,隐式转换通常出现在子类到父类的转换,而强制转换用于父类到子类

📜示例 1:子类向父类的隐式转换(多态)

class Animal {}
class Dog extends Animal {}
​
Animal animal = new Dog(); // 隐式转换,子类转换为父类

解释: 这里 Dog 类是 Animal 类的子类,Dog 对象可以隐式地转换为 Animal 类型。

📜示例 2:父类向子类的强制转换

Animal animal = new Dog(); // 父类引用指向子类对象
Dog dog = (Dog) animal; // 强制转换,父类转换为子类

解释: 虽然 animal 实际上引用的是 Dog 对象,但我们需要使用强制转换才能访问 Dog 类中特有的方法和属性。


🔴类型转换中的注意事项

  1. 类型安全性: 隐式转换通常是安全的,不会丢失数据,而强制转换则需要开发者确认目标类型足够大或不会导致意外数据丢失。

  2. 数据丢失风险: 强制转换时,可能会丢失小数部分或者数据超出范围,开发者需要特别小心。

  3. 类型不兼容: 并非所有类型都可以相互转换,比如 boolean 不能转换为 int


🌷结论🌷

Java 的数据类型转换机制为我们提供了在不同数据类型之间进行灵活转换的能力。

隐式转换是安全且自动的,而强制转换则需要更多的关注和理解。

了解这些转换规则不仅有助于编写更可靠的代码,还能帮助你避免潜在的数据丢失和溢出问题。

通过以上例子,你现在应该能够掌握 Java 中的数据类型转换,并在实际编程中合理应用。

🌷🌷🌷🌷🌷

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

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

相关文章

如何上传tauri项目到csdn gitcode

如何上传tauri项目到csdn gitcode 首先保证项目目录有.gitignore&#xff0c;避免不必要的文件上传分享。 gitignore文件 # Logs logs *.log npm-debug.log* yarn-debug.log* yarn-error.log* pnpm-debug.log* lerna-debug.log*node_modules dist dist-ssr *.local# Editor …

【计算机基础题目】二叉树的前序中序后续遍历之间相互转换 详细例子

创作日志&#xff1a; 笔试题目&#xff0c;掌握了技巧之后这道题就是 so easy~ 一、 1、已知二叉树的 前序和中序&#xff0c;可以求出后序 2、已知二叉树的 中序和后序&#xff0c;可以求出前序 3、已知二叉树的 前序和后序&#xff0c;无法求出唯一的中序 二、求法 求法是…

基于SSM的宿舍管理系统的设计与实现 (含源码+sql+视频导入教程+文档+PPT)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSM的宿舍管理系统9拥有两种角色&#xff1a;管理员和用户 管理员&#xff1a;宿舍管理、学生管理、水电费管理、报修管理、访客管理、各种信息统计报表 用户&#xff1a;个人信息管…

POI操作EXCEL增加下拉框

文章目录 POI操作EXCEL增加下拉框 POI操作EXCEL增加下拉框 有时候通过excel将数据批量导入到系统&#xff0c;而业务操作人员对于一些列不想手动输入&#xff0c;而是采用下拉框的方式来进行选择 采用隐藏sheet页的方式来进行操作 String sheetName "supplier_hidden_s…

傅里叶变换的基本性质和有关定理

一、傅里叶变换的基本性质 1.1 线性性质 若 则 其中:a,b是常数 函数线性组合的傅里叶变换等于歌函数傅里叶变换的相应组合。 1.2 对称性 若 则 关于傅里叶变换的对称性还有 虚、实、奇、偶函数的傅里叶变换性质: 1.3 迭次傅里叶变换 对f(x,y)连续两次做二维傅里叶变换…

秋招突击——9/10、9\11——算法练习——携程笔试练习——2024年秋招第一批笔试

文章目录 引言笔试准备2024年秋招研发第一批第一题第二题第二次实现 第三题第四题第五题参考实现 总结 引言 准备全力冲携程&#xff0c;好好做算法&#xff0c;去线下面试&#xff01;今天就好好做做携程往年的笔试&#xff01; 笔试准备 2024年秋招研发第一批 第一题 imp…

【读书笔记-《30天自制操作系统》-22】Day23

本篇内容比较简单&#xff0c;集中于显示问题。首先编写了应用程序使用的api_malloc&#xff0c;然后实现了在窗口中画点与画线的API与应用程序。有了窗口显示&#xff0c;还要实现关闭窗口的功能&#xff0c;于是在键盘输入API的基础上实现了按下按键关闭窗口。最后发现用上文…

模版进阶(template)

1.非类型模版参数 模版参数分类类型形参与非类型形参。 ① 类型形参&#xff1a;出现在在模板参数列表中&#xff0c;跟在class或者typename之类的参数类型名称。 ② 非类型形参&#xff0c;就是用一个常量作为类(函数)模板的一个参数&#xff0c;在类(函数)模板中可将该参数当…

有毒有害气体检测仪的应用和性能_鼎跃安全

随着现代工业的不断发展和扩张&#xff0c;越来越多的企业涉及到有毒有害气体的生产、使用和处理。工业规模的扩大导致有毒有害气体的排放量增加&#xff0c;同时也增加了气体泄漏的风险。在发生火灾、爆炸或危险化学品泄漏等紧急事件时&#xff0c;救援人员需要迅速了解现场的…

Activiti7《第二式:破剑式》——工作流中的以柔克刚

冲冲冲&#xff01;开干 这篇文章将分为九个篇章&#xff0c;带你逐步掌握工作流的核心知识。这篇文章将带你深入探讨工作流中的 “破剑式”&#xff0c;揭示如何通过 柔与刚 的结合来破解工作流的复杂性。本篇包含了 Activiti7 环境的进一步优化和表结构的深入分析&#xff0…

Python学习——【2.1】if语句相关语法

文章目录 【2.1】if语句相关一、布尔类型和比较运算符&#xff08;一&#xff09;布尔类型&#xff08;二&#xff09;比较运算符 二、if语句的基本格式※、练习 三、if-else组合判断语句※、练习 四、if-elif-else多条件判断语句※、练习 五、判断语句的嵌套※、实战案例 【2.…

【速成Redis】02 Redis 五大基本数据类型常用命令

前言&#xff1a; 上一节课&#xff0c;我们对redis进行了初步了解&#xff0c;和安装好了redis。【速成Redis】01 Redis简介及windows上如何安装redishttps://blog.csdn.net/weixin_71246590/article/details/142319358?spm1001.2014.3001.5501 该篇博客&#xff0c;我们正…

HTML入门笔记

概述 HTML&#xff08;超文本标记语言—HyperText Markup Language&#xff09;是构成 Web 世界的基础&#xff0c;是一种用来告知浏览器如何组织页面的标记语言。 超文本 Hypertext&#xff1a;指连接单个或多个网站间的网页链接&#xff0c;通过这些链接可以访问互联网中的…

论文速递!时序预测!DCSDNet:双卷积季节性分解网络,应用于天然气消费预测过程

本期推文将介绍一种新的时序预测方法:双卷积季节性分解网络&#xff08;Dual Convolution withSeasonal Decomposition Network, DCSDNet&#xff09;在天然气消费预测的应用&#xff0c;这项研究发表于《Applied Energy》期刊。 针对天然气消费的多重季节性和非规律性&#x…

【速成Redis】01 Redis简介及windows上如何安装redis

前言&#xff1a; 适用于&#xff1a;需要快速掌握redis技能的人&#xff08;比如我&#xff09;&#xff0c;在b站&#xff0c;找了个课看。 01.课程简介_哔哩哔哩_bilibili01.课程简介是【GeekHour】一小时Redis教程的第1集视频&#xff0c;该合集共计19集&#xff0c;视频…

【面试八股总结】GMP模型

GMP概念 G&#xff08;Goroutine&#xff09;&#xff1a;代表Go协程&#xff0c;是参与调度与执行的最小单位。 存储Goroutine执行栈信息、状态、以及任务函数等。G的数量无限制&#xff0c;理论上只受内存的影响。Goroutines 是并发执行的基本单位&#xff0c;相比于传统的线…

Redis集群知识及实战

1. 为什么使用集群 在哨兵模式中&#xff0c;仍然只有一个Master节点。当并发写请求较大时&#xff0c;哨兵模式并不能缓解写压力。我们知道只有主节点才具有写能力&#xff0c;那如果在一个集群中&#xff0c;能够配置多个主节点&#xff0c;是不是就可以缓解写压力了呢&…

sourcetree配置ssh连接gitee

使用PuttyGen.exe生成的公钥私钥格式和git文档方法生成的不一样&#xff0c; SSH 公钥设置 | Gitee 帮助中心 gitee方法生成的公钥类似&#xff1a; ssh-ed25519 AAAA***5B Gitee SSH Key PuttyGen.exe生成的&#xff1a; 公钥 ---- BEGIN SSH2 PUBLIC KEY ---- Comment:…

【新手/小白教程】打开一个vue项目的前置准备,nvm安装指定版本node

目录 一、前言二、nvmnvm介绍nvm下载与安装1. 官网下载 nvm 包2. 安装 nvm-setup.exe3. 配置路径和下载镜像4. 检查nvm是否安装完成5. 错误情况 三、nodenode版本查看node命令 一、前言 在换新电脑的时候总是需要把所有东西重新安装配置&#xff0c;这篇用来记录一下打开一个v…

【云原生监控】Prometheus之PushGateway

Prometheus之PushGateway 文章目录 Prometheus之PushGateway介绍作用资源列表基础环境一、部署PushGateway1.1、下载软件包1.2、解压软件包1.3、编辑配置systemctl启动文件1.4、创建日志目录1.5、加载并启动1.6、监控端口1.7、访问PushGateway 二、 配置Prometheus抓取PushGate…