2.3 基本数据类型的转换
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.3基本数据类型的转换
本章目标
掌握基本数据类型间的自动转换
掌握任何基本数据类型的数据都会自动向String转换
掌握基本数据类型间的强制转换
Java的数据类型在定义时就已经确定了,因此不能随意转换成其他的数据类型,但Java允许用户有限度地做类型转换处理。数据类型的转换方式可分为“自动类型转换”及“强制类型转换”两种。
1 数据类型的自动转换
在计算机中完成一个计算时,要求参与计算的两个数值必须类型一致,如果不一致,计算机会自动将其中一个数值类型转换成另外一个数值的类型,然后完成计算。自动转换的原则如下:
(1)转换前的数据类型与转换后的类型兼容。
(2)转换后的数据类型的表示范围比转换前的类型大。
例如,将short类型的变量a转换为int类型,由于short与int皆为整数类型,符合上述条件(1);而int的表示范围比short大,符合条件(2)。因此Java 会自动将原为short类型的变量a转换为int类型。
要注意的是,类型的转换只限该行语句,并不会影响原先所定义的变量的类型,而且通过自动类型的转换可以保证数据的精确度,它不会因为转换而损失数据内容。这种类型的转换方式也称为扩大转换。
范例:数据类型的转换
程序运行结果:
x / y = 1.3519603
10 / 3.5 = 2.857142857142857
10 / 3 = 3
从程序的输出结果可以发现,int类型与float类型进行计算之后,输出的结
果会变成float类型,一个整型常量和一个浮点型常量进行计算之后,结果也会变为一个浮点数据,而如果两个int类型的常量进行计算,最终结果还是int类型,而其小数部分将会被忽略。
也就是说,假设有一个整数和双精度浮点数据做运算时,Java会所整数转换成双精度浮点数后再做运算,运算结果也会变成双精度浮点数。
提示:任何类型的数据都向String转型。
有一种表示字符串的数据类型String,从其定义上可以发现单词首字母大写了,所以此为一个类,属于引用数据类型,但是此类属于系统类,而且使用上有些注意事项,对于此种类型后面会有介绍,在此处所需要知道的只有以下两点:
(1)String可以像普通变量那样直接通过赋值的方式进行声明。字符串是使用“””括起来的。两个字符串之间可以使用“+”进行连接。
(2)任何数据类型碰到String类型的变量或常量之后都向String类型转换。
范例:定义字符串变量
程序运行结果:
str = lixinghua30
从运行结果来看,可以发现整型数据30自动转换成了字符的“30”,与字符串“lixinghua”进行了连接操作,变成了一个新的字符串“lixinghua30”。
范例:字符串常量操作的问题
程序运行结果:
i + j = 12
i + j = 3
从以上的输出结果中可以发现,程序的主要目的是要计算i+j的值,但是由于碰到了字符串常量,所以所有的数据类型都会变为字符串常量,也就是说此时的“+”实际上表示的是字符串连接的含义,对于以上的程序,如果要得到正确的结果,则必须修改为:
System.out.println(“1 + 1 = ” + (i + j)) ;
加上括号之后,就表示输出时先计算两个数字相加的结果。
2 数据类型的强制转换
当两个整数进行运算时,其运算的结果也会是整数。例如,当做整数除尘8/3的运算时,其结果为整数2,并不是实际的2.33333···,因此,在Java中若是想要得到计算的结果是浮点数时,就必须将数据类型做强制性的转换,转换的语法如下:
【格式数据类型的强制性转换语法】
(要转换的数据类型)变量名称;
因为这种强制类型的转换是直接编写在程序代码中的,所以也称为显式转换。以下程序说明了在Java中整数与浮点数是如何转换的。
范例:数据类型的强制转换
程序运行结果:
x = 30
10 / 3 = 3.3333333
在程序中,首先将一个浮点型的变量f内容赋给了int型变量x,因为int数据类型的长度小于float类型的长度,所以此处需要进强制转换。程序的最后使用了两个整型常量进行计算,但是因为将其中的一个整型变量变为了float类型,所以在计算时会强制把其他的整型也变为float类型,所以计算的结果是包含小数的。
只要在某一种数据类型前面用括号加上要转换的目标数据类型,程序运行时就会将此语句中的数据类型做相应类型转换的处理,但这并不影响原来所定义的数据类型。
此外,若是将一个超出该变量可表示范围的值赋给这个变量时,这种转换称为缩小转换。由于在转换的过程中可能会丢失数据的精确度,Java并不会自动做这些类型的转换,此时就必须要做强制性的转换。