当前位置: 首页 > news >正文

Java的类型转换

1.自动类型转换

为什么要学习类型转换呢?

因为在我们实际开发中可能存在将某种类型变量的值,赋值给另一个类型的变量;也可能存在多种数据类型的数据一起运算的情况。

在以上情况中,其实都会涉及到类型转换。类型转换的形式总体分为2种,一种是自动类型转换,一种是强制类型转换

什么是自动类型转换?

答:自动类型转换指的是,数据范围小的变量可以直接赋值给数据范围大的变量 byte a = 12; int b = a; //这里就发生了自动类型转换(把byte类型转换int类型)

自动类型转换的原理是怎样的?

答:自动类型转换其本质就是在较小数据类型数据前面,补了若干个字节

除了byte和int之间的转换之外,其他类型也可以转换,转换顺序如下图所示

下面我们通过代码演示一下,自动类型转换的各种形式。

public class TypeConversionDemo1 { public static void main(String[] args) { // 目标:理解自动类型转换机制。 byte a = 12; int b = a; // 发生了自动类型转换了 System.out.println(a); System.out.println(b); int c = 100; // 4 double d = c;// 8 发生了自动类型转换了 System.out.println(d); char ch = 'a'; // 'a' 97 => 00000000 01100001 int i = ch; // 发生了自动类型转换了 => 00000000 00000000 00000000 01100001 System.out.println(i); } }

表达式的自动类型转换

自动类型转换还有另外一种形式,就是表达式的自动类型转换。所谓表达式指的是几个变量或者几个数据一起参与运算的式子。

如果同一个表达式中,出现不同类型的变量或者数据一起运算,这种情况下运算结果是一个什么数据类型呢?需要遵守下面的两条运算规则:

1.多种数据类型参与运算,其结果以大的数据类型为准 2.byte,short,char 三种类型数据在和其他类型数据运算时,都会转换为int类型再运算 注:boolean类型不能与其他基本数据类型相互转换。

代码演示:

public class TypeConversionDemo2 { public static void main(String[] args) { // 目标:掌握表达式的自动类型转换机制。 byte a = 10; int b = 20; long c = 30; long rs = a + b + c; System.out.println(rs); double rs2 = a + b + 1.0; System.out.println(rs2); byte i = 10; short j = 30; int rs3 = i + j; System.out.println(rs3); // 面试笔:即使两个byte运算,结果也会提升为int byte b1 = 110; byte b2 = 80; int b3 = b1 + b2; System.out.println(b3); } }

2.强制类型转换

前面我们学习了自动类型转换,我们知道可以将数据类型小的数据可以直接赋值给数据范围大的变量。那反过来,能不能将数据范围大的数据直接赋值给数据范围小的变量呢?答案是会报错。

因为数据范围大的数据,赋值给数据范围小的变量,它有可能装不下;就像把一个大桶的水倒入一个小桶中,有溢出的风险。

什么是强制类型转换

但是你强行将范围大的数据,赋值给范围小的变量也是可以的,这里就需要用到强制类型转换。下面是 强制类型转换的格式

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

下面是强制类型转换的代码演示

public class TypeConversionDemo3 { public static void main(String[] args) { // 目标:掌握强制类型转换。 int a = 20; byte b = (byte) a; // ALT + ENTER 强制类型转换。 System.out.println(a); System.out.println(b); int i = 1500; byte j = (byte) i; System.out.println(j); double d = 99.5; int m = (int) d; // 强制类型转换 System.out.println(m); // 丢掉小数部分,保留整数部分 } }

强制类型转换的原理

强制类型转换的原理,其实就是强行把前面几个字节砍掉,但是有数据丢失的风险

注意事项:

1. 强制类型转换可能造成数据(丢失)溢出;

2. 浮点型强转成整型,直接丢掉小数部分,保留整数部分返回。

http://www.jsqmd.com/news/894774/

相关文章:

  • Agentic 设计模式拆解:6 种结构的优缺点与应用场景
  • 29.深度拆解刷机底层原理:Sahara/Firehose/BROM/DFU 协议全解析
  • 意法半导体LIS2DH12TR渠道商
  • 2026年口碑好的防堵雾化喷头/佛山人造雾设备厂家推荐与选型指南 - 品牌宣传支持者
  • 从单体到多智能体:AI架构重构实战与40%成本优化
  • 不止于水:用Obi Fluid和Unity粒子系统,打造从粘稠蜂蜜到喷泉烟雾的创意特效
  • Lovable体育平台如何扛住百万级实时投注?:揭秘WebSocket+边缘计算的毫秒级响应架构
  • 2026年口碑好的汽车零部件工业机器人应用/工业机器人非标定制系统/工业机器人非标定制夹具厂家哪家好 - 行业平台推荐
  • 2026年,灵芝鸡蛋真的靠谱吗?揭秘营养价值与选购秘诀!
  • AI智能文档处理引擎:OCR与NLP如何重塑财税行业工作流
  • 别再手动拖了!用脚本一键将Unity场景Hierarchy结构生成UI折叠菜单(支持无限级)
  • 不止于画图:用嘉立创EDA封装管理器,高效管理你的个人元件库(以QFP、SOP封装为例)
  • 小白也能学会的盒模型基础!!!
  • WorkBuddy 微信无缝接入,手机远程操控电脑干活
  • 从SolidWorks CAD到Simscape仿真:一个机电产品工程师的完整设计验证实战记录
  • TypeScript与Zapier SDK构建智能HubSpot公司信息补全工作流
  • 用Proteus+Keil给STM32F103C8做个“体温计”:手把手实现温度采集与电机控制
  • AI技术落地真相:为何感知的“快”与现实的“慢”存在巨大鸿沟?
  • Redis分布式锁进阶第七十六篇
  • <<哈希表迭代器函数>>
  • AI开发者的网络卡点:Anthropic连接超时实战避坑指南
  • C51开发中PRECEDE指令导致的内存重叠问题解析
  • Lovable运维平台架构设计深度解析(高可用+低延迟+零信任安全三重验证)
  • Java字符串匹配算法:素数乘积法,秒杀暴力匹配,性能炸裂
  • 从零构建548个免费Web工具:极简架构、自动化与性能优化实战
  • 从‘抽球’到‘预测股价’:离散与连续概率模型在数据分析中的实战对比
  • Iceberg方案:HLS建模范式革新与合成数据增强技术
  • MCP数据库连接器:架构、选型与实战指南
  • 秒杀系统中如何处理超卖问题
  • Unity UGUI ScrollRect 动态折叠菜单避坑指南:ContentSizeFitter 刷新问题的奇葩解法