《Java和Android开发学习指南(第2版)》——第2章,第2.7节基本类型转换

简介:

本节书摘来自异步社区《Java和Android开发学习指南(第2版)》一书中的第2章,第2.7节基本类型转换,作者 【加】Budi Kurniawan,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.7 基本类型转换
在处理不同的数据类型的时候,我们常常需要进行转换。例如,将一个变量的值赋给另一个变量,就涉及转换。如果两个变量具有相同的类型,赋值总是会成功。从一种类型到相同类型的转换,叫作等同转换(identity conversion)。例如,如下的转换保证能够成功:

int a = 90; 
int b = a;

然而,向不同的类型转换则无法保证成功,甚至不一定能够那么做。基本类型转换还有另外两种形式,即加宽转换(widening conversion)和收窄转换(narrowing conversion)。

2.7.1 加宽转换
当从一种基本类型向另一种基本类型转换的时候,如果后者的大小和前者相同或者更大,就会发生加宽转换;例如,从int(32位)到long(64位)的转换。在如下情况中,进行加宽转换:

从byte向short、int、long、float或double转换。
从short向int、long、float或double转换。
从char向int、long、float或double转换。
从int向long、float或double转换。
从float向double转换。
从一种整数类型向另一种整数类型的加宽转换,不会有信息丢失的风险。同样的,从float向double的转换也会保留所有的信息。然而,从int或long向float的转换,可能会导致精度丢失。

加宽的基本类型转换是隐式地发生的,不需要在代码中做任何事情。例如:

int a = 10; 
long b = a; // widening conversion

2.7.2 收窄转换
收窄转换发生在从一种类型到另一种拥有较小的大小的类型的转换中,例如,从long(64位)到int(32位)的转换。通常,收窄转换在如下的情况中发生:

从short向byte或char。
从char向byte或short。
从long向byte、short或char。
从float向byte、short、char、int或long。
从double向byte、short、char、int、long或float。
和加宽基本类型转换不同,收窄基本类型转换必须是显式的。需要在圆括号中指定目标类型。例如,如下是从long向int的收窄转换。

long a = 10; 
int b = (int) a; // narrowing conversion

第2行中的(int)告诉编译器,应该发生收窄转换。如果被转换的值比目标类型的容量还要大的话,收窄转换可能导致信息丢失。前面的例子并不会导致信息丢失,因为10对一个int类型来说足够小。然而,在如下的转换中,由于9876543210L对一个int类型来说太大了,会导致一些信息丢失。

long a = 9876543210L; 
int b = (int) a; // the value of b is now 1286608618

有可能导致信息丢失的收窄转换,在你的程序中将会引入一个缺陷。

相关文章
|
20天前
|
前端开发 JavaScript Java
java常用数据判空、比较和类型转换
本文介绍了Java开发中常见的数据处理技巧,包括数据判空、数据比较和类型转换。详细讲解了字符串、Integer、对象、List、Map、Set及数组的判空方法,推荐使用工具类如StringUtils、Objects等。同时,讨论了基本数据类型与引用数据类型的比较方法,以及自动类型转换和强制类型转换的规则。最后,提供了数值类型与字符串互相转换的具体示例。
|
1月前
|
Java API Maven
如何使用Java开发抖音API接口?
在数字化时代,社交媒体平台如抖音成为生活的重要部分。本文详细介绍了如何用Java开发抖音API接口,从创建开发者账号、申请API权限、准备开发环境,到编写代码、测试运行及注意事项,全面覆盖了整个开发流程。
147 10
|
1月前
|
监控 Java API
如何使用Java语言快速开发一套智慧工地系统
使用Java开发智慧工地系统,采用Spring Cloud微服务架构和前后端分离设计,结合MySQL、MongoDB数据库及RESTful API,集成人脸识别、视频监控、设备与环境监测等功能模块,运用Spark/Flink处理大数据,ECharts/AntV G2实现数据可视化,确保系统安全与性能,采用敏捷开发模式,提供详尽文档与用户培训,支持云部署与容器化管理,快速构建高效、灵活的智慧工地解决方案。
|
2天前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
24天前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
46 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
12天前
|
存储 JavaScript 前端开发
基于 SpringBoot 和 Vue 开发校园点餐订餐外卖跑腿Java源码
一个非常实用的校园外卖系统,基于 SpringBoot 和 Vue 的开发。这一系统源于黑马的外卖案例项目 经过站长的进一步改进和优化,提供了更丰富的功能和更高的可用性。 这个项目的架构设计非常有趣。虽然它采用了SpringBoot和Vue的组合,但并不是一个完全分离的项目。 前端视图通过JS的方式引入了Vue和Element UI,既能利用Vue的快速开发优势,
71 13
|
17天前
|
算法 Java API
如何使用Java开发获得淘宝商品描述API接口?
本文详细介绍如何使用Java开发调用淘宝商品描述API接口,涵盖从注册淘宝开放平台账号、阅读平台规则、创建应用并申请接口权限,到安装开发工具、配置开发环境、获取访问令牌,以及具体的Java代码实现和注意事项。通过遵循这些步骤,开发者可以高效地获取商品详情、描述及图片等信息,为项目和业务增添价值。
51 10
|
10天前
|
前端开发 Java 测试技术
java日常开发中如何写出优雅的好维护的代码
代码可读性太差,实际是给团队后续开发中埋坑,优化在平时,没有那个团队会说我专门给你一个月来优化之前的代码,所以在日常开发中就要多注意可读性问题,不要写出几天之后自己都看不懂的代码。
48 2
|
20天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
1月前
|
开发框架 Java 关系型数据库
Java哪个框架适合开发API接口?
在快速发展的软件开发领域,API接口连接了不同的系统和服务。Java作为成熟的编程语言,其生态系统中出现了许多API开发框架。Magic-API因其独特优势和强大功能,成为Java开发者优选的API开发框架。本文将从核心优势、实际应用价值及未来展望等方面,深入探讨Magic-API为何值得选择。
51 2