AVA学习笔记之变量类型转换和类型自动提升

2024-04-09 06:18

本文主要是介绍AVA学习笔记之变量类型转换和类型自动提升,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

AVA学习笔记之变量类型转换和类型自动提升

(2013-01-22 14:14:18)
转载
标签:

杂谈

分类: J2SE

变量的类型转换

 有编程经验的伙计都知道,在不同类型之间进行赋值操作就会越到类型转换的问题,java也是如此。

 1.JAVA的自动类型转换

如果下列2个条件都能满足,那么将一种类型的数据赋给另外一种类型变量时,将执行

自动类型转换(automatic type conversion):

· 这2种类型是兼容的。

· 目的类型数的范围比来源类型的大。

当以上2个条件都满足时,拓宽转换(widening conversion)发生。例如,int型的范围比所有byte型的合法范围大,因此不要求显式强制类型转换语句。对于拓宽转换,数字类型,包括整数(integer)和浮点(floating-point)类型都是彼此兼容的,但是,数字类型和字符类型(char)或布尔类型(bollean)是不兼容的。字符类型(char)和布尔类型(bollean)也是互相不兼容的。

2.不兼容类型的强制转换(强制类型转换)

完成两种不兼容类型之间的转换,你就必须进行强制类型转换。所谓强制类型转换只不过是一种显式的类型变换。它的通用格式如下:

(target-type)value

其中,目标类型(target-type)指定了要将指定值转换成的类型。将int型强制转换成byte型。如果整数的值超出了byte型的取值范围,它的值将会因为对byte型值域取模(整数除以byte得到的余数)而减少。当把浮点值赋给整数类型时一种不同的类型转换发生了:截断(truncation)。整数没有小数部分,当把浮点值赋给整数类型时,它的小数部分会被舍去。

类型自动提升

在JAVA表达式中,如果进行运算的几个变量类型不一致,JAVA表达式会采取类型自动提升的操作。在表达式中对中间值的精确要求有时超过任何一个操作数的范围:

JAVA学习笔记之变量类型转换和类型自动提升
   变量a*b = 2000超过了byte的最大值,为处理这种情形,JAVA自动把byte型,short型提升到int型,这样计算记过d = 20

但有时也会带来意想不到的情况:

JAVA学习笔记之变量类型转换和类型自动提升

 

该程序试图将一个完全合法的byte型的值50*2再存储给一个byte型的变量。但是当表达式求值的时候,操作数被自动地提升为int型,计算结果也被提升为int型。这样,表达式的结果现在是int型,不强制转换它就不能被赋为byte型。确实如此,在这个特别的情况下,被赋的值将仍然适合目标类型。

在你理解溢出的后果的情况下,你应该使用一个显式的强制类型转换

JAVA学习笔记之变量类型转换和类型自动提升
  这样b的值是100.

类型提升的约定

1、将所有byte short 提升到int

2、如果操作数中有一个long,整个表达式提升到long型;

  如果操作数中有一个float ,整个表达式提升到float型;

  如果操作数中有一个double,整个表达式提升到double型

 总体就是把精确度向表达式中高的提升

这篇关于AVA学习笔记之变量类型转换和类型自动提升的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/887388

相关文章

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

一文全面详解Python变量作用域

《一文全面详解Python变量作用域》变量作用域是Python中非常重要的概念,它决定了在哪里可以访问变量,下面我将用通俗易懂的方式,结合代码示例和图表,带你全面了解Python变量作用域,需要的朋友... 目录一、什么是变量作用域?二、python的四种作用域作用域查找顺序图示三、各作用域详解1. 局部作

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Python使用pynput模拟实现键盘自动输入工具

《Python使用pynput模拟实现键盘自动输入工具》在日常办公和软件开发中,我们经常需要处理大量重复的文本输入工作,所以本文就来和大家介绍一款使用Python的PyQt5库结合pynput键盘控制... 目录概述:当自动化遇上可视化功能全景图核心功能矩阵技术栈深度效果展示使用教程四步操作指南核心代码解析

SpringBoot实现文件记录日志及日志文件自动归档和压缩

《SpringBoot实现文件记录日志及日志文件自动归档和压缩》Logback是Java日志框架,通过Logger收集日志并经Appender输出至控制台、文件等,SpringBoot配置logbac... 目录1、什么是Logback2、SpringBoot实现文件记录日志,日志文件自动归档和压缩2.1、

SpringCloud使用Nacos 配置中心实现配置自动刷新功能使用

《SpringCloud使用Nacos配置中心实现配置自动刷新功能使用》SpringCloud项目中使用Nacos作为配置中心可以方便开发及运维人员随时查看配置信息,及配置共享,并且Nacos支持配... 目录前言一、Nacos中集中配置方式?二、使用步骤1.使用$Value 注解2.使用@Configur

Golang实现Redis分布式锁(Lua脚本+可重入+自动续期)

《Golang实现Redis分布式锁(Lua脚本+可重入+自动续期)》本文主要介绍了Golang分布式锁实现,采用Redis+Lua脚本确保原子性,持可重入和自动续期,用于防止超卖及重复下单,具有一定... 目录1 概念应用场景分布式锁必备特性2 思路分析宕机与过期防止误删keyLua保证原子性可重入锁自动

python利用backoff实现异常自动重试详解

《python利用backoff实现异常自动重试详解》backoff是一个用于实现重试机制的Python库,通过指数退避或其他策略自动重试失败的操作,下面小编就来和大家详细讲讲如何利用backoff实... 目录1. backoff 库简介2. on_exception 装饰器的原理2.1 核心逻辑2.2