文章目录
- 1.运算时的自转
- 2.运算时的强转
- 3.强转时的精度丢失问题
1.运算时的自转
不同数字类型之间的大小关系如下:double > float > long > int > char, short,byte
自转:小类型的数据可以直接赋值给大类型的变量;
byte short char三种比int小的类型,运算时,会自动转换为int类型后再进行计算。
自转只能发生在小的类型转换为大的类型,基本数据类型中,除去布尔值,其他基本数据类型都遵循此规则,布尔值因为其特殊性,无法与其他数据类型进行强转或自转。
2.运算时的强转
强转---->大类型的数据不能直接赋值给小类型变量,必须手动强转才可以;
同时,我们也可以使用强转将int类型转换为byte short char 类型。
package partOne;
//本类用于测试byte short char 类型运算时的自转
public class Demo2 {
public static void main(String[] args) {
//byte short char三种比int小的类型,运算时,会自动转换为int类型后再进行计算
byte b1 = 1;
byte b2 = 2;
//会报错,b1与b2在计算时会自转为int类型,所以相加的结果也为int类型,
//但是其标记为byte类型与其不符合,所以无法通过编译
//byte b3 = b1+b2;
byte b3 = (byte) (b1+b2); //我们可以此时使用强制转换,将其转回为byte类型使用
int b4 = b1+b2; //也可以直接使用int类型接收此参数
}
}
基本数据类型中,除去布尔值,其他基本数据类型都遵循此规则,布尔值因为其特殊性,无法与其他数据类型进行强转或自转。
3.强转时的精度丢失问题
自转与强转适用于除布尔型之外的所有基本数据类型,但是因为有的数据类型表示的数位多,有的数据类型数位少,所以数位多的数据类型强转为数位少的数据类型时,会出现精度丢失问题
具体的数值类型转换图如下:
大致描述了转换之间的关系,其中实线表示无信息丢失,虚线表示有信息丢失。需要注意的是,char类型与int类型是看作同包含同等位数的俩个类型。