java基础之数据类型转换

本文详细介绍了Java中的数据类型,包括基本数据类型(整型、浮点数、字符、布尔)和引用数据类型,并讨论了不同类型间的转换规则及运算符的使用。

Java的数据类型分为两大类:基本数据类型,引用数据类型。
基本数据类型:包括 整型、 浮点数 、 字符 、 布尔 。
1.整型:表示的是整数。分为字节型byte、短整型short、整型int、长整型long。
2.浮点型:表示的是小数。包括单精度浮点数float, 双精度浮点数double。
3.字符型:表示的是单个字符。类型只有一个是char。
4.布尔型:表示的是真假。类型是boolean ,其值只有真假两种情况。
在这里插入图片描述
java程序中要求参与计算的数据,必须要保证数据类型统一成一致,才可以参与运算,如果数据类型不一致将发生类型的转换。所以数据类型之间的转换是有必要的。
取值范围小的类型 可以自动转换为 取值范围大的类型 。也就是小范围变量到大范围变量是自动转换的。满足byte->short->int->long->float->double,其中char类型的变量可以直接自动转换给int类型的变量。
注意:char是编号,但是字符编号的范围是有限的,相对于int类型来说是小范围,所以可以转换。
char ch = '中'; int it = ch ; System.out.println(it); // 就是 '中'在底层的编号
强制转换:将 取值范围大的类型 强制转换成 取值范围小的类型 。也就是把大范围类型的数据或者大范围的类型变量
赋值给小范围的类型变量必须要强制类型转换否则代码报错。 比较而言,自动转换是Java自动执行的,而强制转换需要我们自己手动执行。
注意:
1.浮点型转成整型,直接截断小数点,保留整数部分,可能造成数据损失精度。
2.大范围类型的变量 强制转成 小范围类型的变量,可能造成数据丢失。
数据类型在表达式中参与运算时将满足一定的转换规则,转换规则:
1.范围小的类型向范围大的类型提升, byte、short、char 运算时是直接提升为 int的(byte、short、char–>int–>long–>float–>double)。
2.表达式的最终类型由表达式中的最高类型决定。
计算机存储浮点数:
32位:0-22位为有效数字 23~30位为位移阶数 31位为符号位
64位:0-51位为有效数字 52-62位为位移阶数 63位为符号位
在这里插入图片描述
图 中六个实箭头表示无信息损失的转换,而三个虚箭头表示的转换则可能会丢失精度。有时在程序设计中也需要进行在图 1-1 中没有出现的转换,在 Java 中这种数字转换也是可以进行的,不过信息可能会丢失。在可能丢失信息的情况下进行的转换是通过强制类型转换来完成的。其语法是在需要进行强制类型转换的表达式前使用圆括号,圆括号中是需要转换的目标类型。例如:
double x = 7.8;
int n = (int)x; //x 等于 7
Java 使用常见的算术运算符+-*/进行加、减、乘、除的运算。当除法运算符/作用于两个整数时,是进行整数除法。
整数的模(即求余)运算使用 % 运算符。算法如下:
5%(-3)的值是2,(-5)%(-3)是-2。因为%被俗称为“取余除”操作符,就是取被除数除以除数后的余数作为计算结果。既然结果是余数,那么余数的符号肯定是与被除数的符号相同了。
对整型变量一种最常见的操作就是递增与递减运算,与 C/C++ 一样 Java 也支持递增和递减运算符。例如:
int n = 7, m = 2;
double d = 7;
n = n / m; //n 等于 3
d /= m; //d 等于 3.5
n–; //n 等于 2
int a = 2 * n++; //a 等于 4
int b = 2 * ++m; //b 等于 6
此外 Java 还具有完备的关系运算符,如==(是否相等),<(小于),>(大于),<=(小于等于),>=(大于等于),!=(不等于);并且 Java 使用&&表示逻辑与,||表示逻辑或,!表示逻辑非;以及七种位运算符&(与)、|(或)、^(异或)、~(非)、 >>(右移)、<<(左移)、>>>(高位填充 0 的右移)。
最后 Java 还支持一种三元运算符 ?: ,这个运算符有时很有用。它的形式为
condition ? e1 : e2 这是一个表达式,在 condition 为 true 时返回值为 e1,否则为 e2。例如:min = x < y ? x : y; 则 min 为 x 与 y 中的较小值。

自动类型转换,也称隐式类型转换,是指不需要书写代码,由系统自动完成的类型转换。由于实际开发中这样的类型转换很多,所以Java语言在设计,没有为该操作设计语法,而是由JVM自动完成。 转换规则 从存储范围小的类型到存储范围的类型。 具体规则为: byte→short(char)→int→long→float→double 也就是说byte类型的变量可以自动转换为short类型,示例代码: byte b = 10; short sh = b; 这里在赋值,JVM首先将b的值转换为short类型,然后再赋值给sh。 在类型转换可以跳跃。示例代码: byte b1 = 100; int n = b1; l 注意问题 在整数之间进行类型转换,数值不发生改变,而,特将整数类型别是比较的整数类型转换成小数类型,由于存储方式不同,有可能存在数据精度的损失。 强制类型转换,也称显式类型转换,是指必须书写代码才能完成的类型转换。该类类型转换可能存在精度的损失,所以必须书写相应的代码,并且能够忍受该种损失才进行该类型的转换转换规则 从存储范围的类型到存储范围小的类型。 具体规则为: double→float→long→int→short(char)→byte 语法格式为: (转换到的类型)需要转换的值 示例代码: double d = 3.10; int n = (int)d; 这里将double类型的变量d强制转换成int类型,然后赋值给变量n。需要说明的是小数强制转换为整数,采用的是“去1法”,也就是无条件的舍弃小数点的所有数字,则以上转换出的结果是3。整数强制转换为整数取数字的低位,例如int类型的变量转换为byte类型,则只去int类型的低8位(也就是最后一个字节)的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值