Java自动类型转换和强制类型转换

数据类型的转换可以分为隐式转换(自动类型转换)和显式转换(强制类型转换)两种。

隐式转换(自动类型转换)

满足2 个条件,那么将一种类型的数据赋给另外一种类型变量的时,将执行自动类型转换(automatic type conversion)。

	两种数据类型彼此兼容目标类型的取值范围大于源数据类型(低级类型数据转换成高级类型数据)

当满足以上 2 个条件时,自动转换(widening conversion)发生。例如 byte 类型向 short 类型转换时,由于 short 类型的取值范围较大,会自动将 byte 转换为 short 类型。

在运算过程中,由于不同的数据类型会转换成同一种数据类型,所以整型、浮点型以及字符型都可以参与混合运算。自动转换的规则是从低级类型数据转换成高级类型数据。转换规则如下:

	数值型数据的转换:byte→short→int→long→float→double。字符型转换为整型:char→int。

以上数据类型的转换遵循从左到右的转换顺序,最终转换成表达式中表示范围最大的变量的数据类型。

示例自动类型转换
顾客到超市购物,购买牙膏 2 盒,面巾纸 4 盒。其中牙膏的价格是 10.9 元,面巾纸的价格是 5.8 元,求商品总价格。

实现

public static void main(String[] args) {float price1 = 10.9f; // 定义牙膏的价格double price2 = 5.8; // 定义面巾纸的价格int num1 = 2; // 定义牙膏的数量int num2 = 4; // 定义面巾纸的数量double res = price1 * num1 + price2 * num2; // 计算总价System.out.println("一共付给收银员" + res + "元"); // 输出总价
}

上述代码中首先定义了一个 float 类型的变量存储牙膏的价格,然后定义了一个 double 类型的变量存储面巾纸的价格,再定义两个 int 类型的变量存储物品的数量,最后进行了乘运算以及和运算之后,将结果储存在一个 double 类型的变量中进行输出。

输出结果

一共付给收银员44.999923706055

从执行结果看出,float、int 和 double 三种数据类型参与运算,最后输出的结果为 double 类型的数据。这种转换一般称为“表达式中类型的自动提升”。

使用一个显示的强制类型转换,例如:

byte b = 50;
b = (byte)(b*2);

这样就能产生正确的值 100。

注意:char 类型比较特殊,char 自动转换成 int、long、float 和 double,但 byte 和 short 不能自动转换为 char,而且 char 也不能自动转换为 byte 或 short。

显式转换(强制类型转换)

尽管自动类型转换是很有帮助的,但并不能满足所有的编程需要。例如,如果你需要将 double 型的值赋给一个 int 型的变量,你将怎么办?

这种转换不会自动进行,因为 double 型的变化范围比 int 型的要小。这种转换有使成为“缩小转换”,因为你肯定要将源数据类型的值变小才能适合目标数据类型。

所以当两种数据类型不兼容,或目标类型的取值范围小于源类型时,自动转换将无法进行,这时就需要进行强制类型转换。其语法格式如下:

(type)variableName

其中,type 为 variableName 要转换成的数据类型,而 variableName 是指要进行类型转换的变量名称,强制转换的实例如下:

int a = 3;
double b = 9.0;
a = (int)b;

上述代码中首先将 double 类型变量 b 的值强制转换成 int 类型,然后将值赋给 a,但是变量 b 本身的值是没有发生变化的。

在强制类型转换中,如果是将浮点类型的值转换为整数,直接去掉小数点后边的所有数字;而如果是整数类型强制转换为浮点类型时,将在小数点后面补零。

示例强制类型转换
顾客到超市购物,购买牙膏 2 盒,面巾纸 4 盒。其中牙膏的价格是 10.9 元,面巾纸的价格是 5.8 元,求商品总价格,在计算总价时采用 int 类型的数据进行存储。实现代码如下:

public static void main(String[] args) {float price1 = 10.9f;double price2 = 5.8;int num1 = 2;int num2 = 4;int res2 = (int) (price1 * num1 + price2 * num2);System.out.println("一共付给收银员" + res2 + "元");
}

在上例中,有 double 类型、float 类型和 int 类型的数据参与运算,其运算结果默认为 double 类型,题目要求的结果为 int 类型,因为 int 类型的取值范围要小于 double 类型的取值范围,所以需要进行强制类型转换。

输出结果

一共付给收银员44

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

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

相关文章

mysql数据库(3):使用数据库

目录 (1)使用SHOW语句找出服务器上当前存在什么数据库 (2)访问某个数据库 (3)查看数据库用户名和密码 (1)使用SHOW语句找出服务器上当前存在什么数据库 show databases; 返回&a…

面向对象方法的优势简化软件开发的过程_软件开发技巧的途径

软件开发的复杂性每天都在增加。几乎每年都会发布一个新的框架(例如AngularJS,ReactJS)和一个新的构建工具(例如Webpack,Rollup)。甚至每年都会发布新的JavaScript版本(ECMAScript 2015、2016和…

Java String字符串和整型int的相互转换

String 在编程中被广泛使用,所以掌握 String 和 int 的相互转换方法是极其重要的。 String转换为int String 字符串转整型 int 有以下两种方式: Integer.parseInt(str)Integer.valueOf(str).intValue()注意:Integer 是一个类,是…

mysql数据库(4): 创建并选择数据库

目录 (1)创建数据库yang (2)使用yang这个数据库,让yang变成当前数据库 (3)每次启动mysql会话时在使用前先选择这个固定的数据库 (1)创建数据库yang create database yang; 返回: (2)使用yang这个数据库,让yang变成当前数据库 use yang;…

flowjo软件使用方法_管家婆软件使用方法出库教程,管家婆软件做账流程视频_双全科技...

管家婆软件的使用方法出库,管家婆软件做账流程视频想要做好财务管理工作,那么财务人员就要经常对自己进行总结,归纳工作中的得失,对工作存在的问题要及时进行整改,提升工作效率。下面就由管家婆软件小编介绍一下管家婆…

Java 字符串拼接的各种玩法

java中字符串拼接各种方式与执行效率 由于String对象是不可变对象,因此在需要对字符串进行修改操作时(如字符串连接和替换),String对象总是会生成新的对象,所以其性能相对较差。   String常量的累加操作:…

mysql数据库(5): 创建表

目录 (1)查看有哪些表 (2)创建一个宠物表关于名字,主人,种类,性别。 (3)查看下创建的表 (4)查看某个表内容 (1)查看有…

谷歌浏览器外贸版_外贸 网站移动端优化 浅析

外贸 网站移动端优化 浅析自2015年推出所谓的Mobilegeddon以来,移动设备的重要性一直在不断增长, 网站移动端优化 就成了不得不引起重视的问题,同学们从事谷歌SEO优化工作就必须考虑不断变化的环境,从而在对应的项目上进行相关的操…

开机f8修复电脑步骤_电脑无法开机怎么办,8 种情况的修复方法

电脑故障千奇百怪,其中最令人慌张的一定是无法开机。导致电脑无法开机的原因太多了,但线索却是最少,我们唯一知道的事实就是:什么都不起作用了。作为非专业维修人员,如果解决电脑无法开机的问题?老实说小A并…

mysql数据库(6):将数据装入表中

目录 (1)一条数据一条数据的插入 (2)批量插入 (1)一条数据一条数据的插入 INSERT INTO pet VALUES(hanhan,洋洋,hehe,f,2022/2/5,NULL); 返回: 空就填为 null (2)…

Java Pattern类和Matcher类的使用

java.util.regex 是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包。它包括两个类:Pattern 和 Matcher。 Pattern 对象是正则表达式编译后在内存中的表示形式,因此,正则表达式字符串必须先被编译为 Pattern 对象,然…

mysql数据库(7):表中检索信息

目录 (1)选择所有数据 (2)修改表内容 方法一 方法二 (3)单独选择某一行 (4)选择特殊列 (5)分类行 (6)日期计算 (…

saas- -m ihrm 项目_Convertlab等企业入选腾讯SaaS加速器二期名单

全球TMT2020年10月30日,10月29日,腾讯SaaS加速器二期入选名单正式公布。Convertlab从超过1500个报名项目中脱颖而出,入选腾讯SaaS加速器全球40强。入选的40家企业覆盖零售、医疗、金融、教育、工业、地产等13个领域,总估值超700亿…

20个正则表达式必知(前端开发)

正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。 列目录时, dir .txt或ls .txt中的.txt就不是一个正则表达式,因为这里与正则式的*的含义…

mysql数据库(8):获得数据库和表的信息

目录 (1)查看有哪些数据库 (2)选择数据库 (3)查看该数据库中有哪些表 (4)查看表结构 (1)查看有哪些数据库 show databases; 返回: &#xf…

energy in transition课文翻译_备战四六 | 四六级翻译常考固定表达,速记!

80个固定表达四六级翻译内容一般涉及:中国传统文化、旅游活动、历史事件、经济政治、社会发展等相关的词汇。今天和大家分享四六级考试中常考的固定表达。1. 随着经济的繁荣 with the booming of the economy2. 随着人民生活水平的显著提高 with the remarkable imp…

正则表达式语法详解

正则表达式的发展 1956 年, 一位叫 Stephen Kleene 的数学家在 McCulloch 和 Pitts 早期工作的基础上,发表了一篇标题为"神经网事件的表示法"的论文,引入了正则表达式的概念。正则表达式就是用来描述他称为"正则集的代数"的表达式&…

mysql数据库(9):常用查询的例子

目录 (1)可以使用以下语句创建示例表 (2)执行语句后,查看表所包含内容 (3)列的最大值 (4)拥有某个列的最大值的行 方法一: 方法二: &#x…

树莓派 小屏幕_树莓派学习手动积累(1)

树莓派4B到手,满怀激动地拆开包装,准备大展拳脚。Raspberry Pi(中文名为“树莓派”,简写为RPi,(或者RasPi / RPI)是为学习计算机编程教育而设计),只有信用卡大小的微型电脑,其系统基于Linux。随着Windows 10 IoT的发布…

正则表达式的匹配规则

字面量字符和元字符 大部分字符在正则表达式中,就是字面的含义,比如 /a/ 匹配 a, /b/ 匹配b。这种只表示它字面量含义的被称为字面量字符。 除了字面量,还有一些字符有特殊含义,不代表字面意思,被称为元字…