转换原因
Java是强类型语言,数据类型之间不能随意转换,但运算时数据类型不匹配,所以需要转换.
- 自动类型提升
- 强制类型转换
2.1、自动类型提升
- 概念
范围小的数据类型可以直接转换为范围大的数据类型
- 数据类型范围大小排序
- 要点
- 数据类型兼容 byte short char int long .... 都属于数字类型 都是兼容的
boolean 是参与类型转换- 小范围的数据类型 转换为 大范围的数据类型
- 案例
2.2、强制类型转换
- 概念
大范围数据类型的变量/常量 赋值 给一个小范围数据类型的变量,需要进行强制转换.
要求: 数据类型之间要兼容
- 格式
目标数据类型 变量名 = (目标数据类型)原数据类型变量名/原常量值;
- 注意事项
- 强制类型转换可能会损失精度,得到错误的数据.
- 小数类型强制转换为整数类型时,直接舍去小数部分,只保留整数部分.
- 案例
概述
- 在编译时,整数常量的计算会直接算出结果,并且会自动判断该结果是否在该数据类型取值范围内
- 在为 byte short char 类型变量赋值的时候, 字面值类型默认都为int ,按照道理应该需要强制转换 ,但实际不强制转换也能编译通过,这是因为强制转换在编译器编译的时候会自动的加上。
表达式: 由 变量 常量 运算符 组成的式子 叫做表达式的值
特点: 每个表达式经过计算最终会得到一个值,这个值叫做表达式的值.
在表达式运算的过程中,也会发生类型的自动提升,这个机制直接决定表达式值的类型
规则:
- 当表达式中存在 double ---> 表达式的值类型为 double
- 反之 当表达式中存在float --> 表达式值的类型 float
- 再反之 当表达式中 存在long ---> 表达式的值类型为 long
- 其他情况都为 int
案例
即范围小的数据类型可以直接转换为范围大的数据类型
要点:
大范围数据类型的变量/常量 赋值 给一个小范围数据类型的变量,需要进行强制转换.
要求:
数据类型之间要兼容
注意:
- 强制类型转换可能会损失精度,得到错误的数据.
- 小数类型强制转换为整数类型时,直接舍去小数部分,只保留整数部分.
在表达式运算的过程中,也会发生类型的自动提升,这个机制直接决定表达式值的类型
规则:
- 当表达式中存在 double ---> 表达式的值类型为 double
- 反之 当表达式中存在float --> 表达式值的类型 float
- 再反之 当表达式中 存在long ---> 表达式的值类型为 long
- 其他情况都为 int
一、 在编译时,整数常量赋值给变量的时候,会直接算出结果,并且会自动判断该结果是否在该数据类型取值范围内
注意:
二、 在为 byte short char 类型变量赋值的时候, 字面值类型默认都为int ,按照道理应该需要强制转换
例如:
byte b = (byte)10;
// 10 类型是int
但事实上我们会发现:
byte b = 10;
照样能顺利编译运行,
这是因为 整数类型常量赋值在编译器编译的时候,会自动的加上强制转换 ,从而减少了程序员的工作量( 仅限整数常量赋值,小数赋值、表达式赋值不会 )
byte a = 123;
byte b = a;
能顺利编译运行;short a = 123;
byte b = a;
不能顺利编译运行;float a = 12.3;
不能顺利编译运行;编译提示:
需要: float
找到: double
1 个错误
这是因为:
1. 小数类型的字面值常量默认类型是 double类型(且编译器不会自动强制转换)
2. float 类型变量在定义的时候,需要在字面值后加 F / f,建议F
3. double 类型的变量在定义的时候,可以在字面值后加 D / d,也可以不加.
4. 浮点型存储的数据是不精确的数据,所以在运算过程中,其结果也是不精确的.采用的科学计数法.
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/java-jiao-cheng/15668.html