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.xdnf.cn/news/144868.html

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

相关文章

排序的实现

1&#xff0c;插入排序 时间复杂度O(N) 思路&#xff1a;当插入第i个元素时&#xff0c;前面i-1个元素已经排好&#xff0c;将第i个元素与前面的元素比较&#xff0c;找到插入的位置&#xff0c;原来位置的元素向后挪。 动图展示&#xff1a; 从上图可以看出&#xff0c;先把…

CS61C 2020计算机组成原理Lab03

Exercise 1: Familiarizing yourself with Venus .data .word 2, 4, 6, 8 n: .word 9.text main: # add t0, x0, x0# addi 是 "add immediate"&#xff08;立即数加法&#xff09;的缩写&#xff0c;表示这是一个加法指令&#xff0c;其中一个加数是一个立即数&am…

macos tcl-tk python图形库软件包安装 port 和brew 包管理工具安装方法和使用总结

macos下安装这个tcl-tk 图形库&#xff0c; 使用port和brew 安装时是不一样的&#xff0c; 软件包名称不一样&#xff0c;安装后的软件文件路径信息也不一样。 在brew 包管理工具中&#xff0c;这个软件包的名称就是tcl-tk&#xff0c; 安装方法为 brew install tcl-tk , 而…

昂科烧录器支持Senasic琻捷电子的蓝牙低功耗芯片SNP746

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表&#xff0c;其中Senasic琻捷电子的蓝牙低功耗芯片SNP746已经被昂科的通用烧录平台AP8000所支持。 SNP746是一款蓝牙低功耗芯片&#xff0c;集成了压力传感器和加速度传感器的测量电路。它是为…

表达式求值(综合应用的难题)

一、各种表达式的含义与操作 请看下面链接里面的博客吧&#xff0c;这是一位大佬写的&#xff0c;里面的图很是不错&#xff0c;可以看看。 各种表达式的概念与操作 二、题目 给定一个表达式&#xff0c;其中运算符仅包含 ,-,*,/&#xff08;加 减 乘 整除&#xff09;&…

产业报告 | 2024年中国机器人产业研究报告

近日&#xff0c;世界机器人大会在北京亦庄国际会展中心举办。据悉&#xff0c;这是国内最大的机器人展会&#xff0c;今年的展会规模更是创下新高&#xff0c;共有169家企业参展&#xff0c;展出的产品数量超过600款&#xff0c;观展人次超过30万&#xff0c;足见各行各业对机…

QT widgets 窗口缩放,自适应窗口大小进行布局

1. 窗口布局 2. 尺寸策略&#xff1a;扩展 Fixed (固定): 行为&#xff1a;控件的大小是固定的&#xff0c;不会随着窗口大小的变化而改变。它的大小由控件的 sizeHint() 返回的值决定。 适用场景&#xff1a;当你希望控件的大小保持不变&#xff0c;不随布局调整时使用&#x…

前端vue-插值表达式和v-html的区别

创建vue实例的时候&#xff0c;可以有两种形式。 1.let appnew Vue({}) 2 const appnew Vue({}) 3 el是挂载点&#xff0c;是上面div的id值 4 data中的值可以展示在上面div中 5 v-html标签里面如果有内容&#xff0c;则我们的新内容会把标签里面的内容覆盖掉

解决 Torch not compiled with CUDA enabled 问题 | MiniCPM3-4B 【应用开发笔记】

最近在研究测试MiniCPM3-4B&#xff0c;这里记录一下遇到的cuda和torch版本问题 在调试和运行MiniCPM3-4B过程中如果出现找不到某个包&#xff0c;就用pip进行安装&#xff0c;如果提示GPU相关的问题则需要进一步检查 解决 Torch not compiled with CUDA enabled 问题 一、查看…

Arthas 全攻略:让调试变得简单

文章目录 一、简介二、命令列表 一、简介 注意 &#xff1a; 我安装的版本是&#xff1a;Arthas V3.7.2 官网&#xff1a;https://arthas.aliyun.com/doc/ 相关错误解决方案请看GitHub&#xff1a;https://github.com/alibaba/arthas/issues Alibaba开源的Java诊断工具。 从…

我的AI工具箱Tauri版-MicrosoftTTS文本转语音

本教程基于自研的AI工具箱Tauri版进行MicrosoftTTS文本转语音服务。 MicrosoftTTS文本转语音服务 是自研的AI工具箱Tauri版中的一款功能模块&#xff0c;专为实现高效的文本转语音操作而设计。通过集成微软TTS服务&#xff0c;用户可以将大量文本自动转换为自然流畅的语音文件…

圣多纳释放法,达到内心的平静

圣多纳释放法的关键在于&#xff1a;我们被情绪控制时&#xff0c;不应该压抑情绪或是发泄情绪。 利用释放法处理情绪是最健康的方法&#xff0c;可以帮助我们获得自由与平静。当我们面对讨厌的人时&#xff0c;我们真正要做的并非压抑或者爆发&#xff0c;而是将“讨厌”这种…

仪表放大器AD620

AD623 是一款低功耗、高精度的仪表放大器&#xff0c;而不是轨到轨运算放大器。它的输入电压范围并不覆盖整个电源电压&#xff08;轨到轨&#xff09;&#xff0c;但在单电源供电下可以处理接近地电位的输入信号。 AD620 和 AD623 都是仪表放大器&#xff0c;但它们在一些关键…

HTB-Netmon(prtg配置文件获取,CVE-2018-9276复现)

前言 各位师傅大家好&#xff0c;我是qmx_07&#xff0c;今天给大家讲解Netmon靶机 渗透流程 信息搜集 服务器开放了80HTTP、21FTP(匿名登录)、445SMB服务 FTP匿名登录 获取敏感文件 登录后台 网站登录需要 账号、密码 &#xff0c;尝试去FTP服务 碰下运气 通过翻阅ft…

基于Python flask的淘宝商品数据分析可视化系统,包括大屏和主题分析,还有回归预测

背景介绍 随着电子商务的迅猛发展&#xff0c;平台上积累了大量的用户行为和商品交易数据。这些数据蕴含着极大的商业价值&#xff0c;可以为市场趋势预测、商品优化以及用户行为分析提供重要的参考。淘宝作为全球最大的在线购物平台之一&#xff0c;拥有海量的商品和用户数据…

联想一体机怎么重装系统_联想一体机重装win10系统教程

联想一体机怎么重装系统&#xff1f;联想一体机重装系统有很多&#xff0c;有一键重装、有U盘重装、有硬盘重装等方式&#xff0c;最保险的方式是u盘重装系统。需要准备一个空U盘&#xff0c;然后利用第三方工具制作启动u盘&#xff0c;制作完成后进入pe重装系统&#xff0c;下…

集装箱机房可视化:高效管理与监控

通过图扑可视化平台实时监控集装箱机房的运行状态和环境参数&#xff0c;优化资源配置&#xff0c;提升运维效率&#xff0c;确保数据中心安全可靠运行。

Swagger 概念和使用以及遇到的问题

前言 接口文档对于前后端开发人员都十分重要。尤其近几年流行前后端分离后接口文档又变 成重中之重。接口文档固然重要,但是由于项目周期等原因后端人员经常出现无法及时更新&#xff0c; 导致前端人员抱怨接口文档和实际情况不一致。 很多人员会抱怨别人写的接口文档不…

dll注入的实现及session0注入

记录一下跟着红队蓝军师傅学免杀的过程 本节旨在学习dll注入和代码实现并不涉及免杀知识 dll注入流程 dll注入要么注入自己写的程序要么找个程序进行注入&#xff0c;一般是找其他程序进行注入 所以按照上面的步骤进行 其中申请空间&#xff0c;创建线程都是在远程的另一个进…

【Linux】-----进程第一弹

目录 概念 描述进程-PCB 查看进程 获取进程标识符 终止进程 fork创建进程 返回值说明 进程的状态 ①运行状态(R) ②浅度睡眠(S) ③深度睡眠(D) ④暂停状态(T) ⑤僵尸状态(Z)(重点) 是什么&#xff1f; 举例 危害 孤儿进程 ⑥死亡状态(X) 概念 课本上对于进程…