类型转换是一个值从某种类型转换为另一种类型的执行过程
低精度数据类型向高精度类型转换时,永远不会出现溢出、精度丢失的问题,但是高精度数据类型向低精度数据类型转换则必然出现精度丢失,并且转换失败,Long长整数类型转换为float、double精度类型时就会出现精度丢失。
数据类型转换共有两种方式,即隐式转换和显式转换
隐式类型转换
从低级类型向高级类型的转换,系统将自动执行,程序员无须进行任何操作,这种类型的转换称为隐式转换,隐式转换的整型、实型、字符型数据类型可以混合运算,运算中,不同的类型数据先转化为同一类型,然后进行运算。
隐式转换会涉及到基本数据类型转换,但是不包括逻辑类型与字符类型。
隐式代码部分
//使用int类型变量为float型变量赋值
//此时int类型变量将隐式转化为float类型变量
int x=50; //声明int变量 x
float y=x; //将x赋值给 y
system.out.println(y); //打印 y
结果为:
50.0
显式类型转换
当把高精度变量的值赋给低精度变量时,必须要用显式类型转换,显式类型转换又称为强制类型转换,强制类型转换可能导致溢出或者精度丢失。
溢出主要是内存大小的问题,并且要考虑数值的大小,还要考虑数值是否有可能会存在溢出。
大类型数值才能感受到精度丢失,数值过小将无法感受到精度丢失。
显式代码部分
int a=(int)45.23;
System.out.println("a的值="+a); //输出a的值为45
long b=(long)456.6F;
System.out.println("b的值="+b); //输出b的值为456
int c=(int)'d';
System.out.println("c的值="+c); //输出c的值为100
结果为:
a的值=45
b的值=456
c的值=100
当前执行显示类型转换会出现精度丢失,除了boolean类型以外的其他基本数据类型之间的转换,全部都能以显式类型转换的方法进行转换。
当把一个整数赋值给一个byte、short、int、long型变量时,不可以超出这些变量的取值范围,否则只能使用强制类型转换来进行转换。
如:byte b=(byte)129;
byte b=(byte)129;
system.out.println("b的值="b); //输出b的值为-127
结果为:
b的值=-127
Byte型最大值为127,如果超过了这个范围,那么就会出现溢出,那么就涉及到反码、补码、原码的问题了(正数的反码和补码都等于源码)。
负数的反码是符号位保持变,其余位取反,负数的补码是在其反码的基础上+1,那么可以理解位补码到反码-1,(负数溢出变为最大值,正数溢出变为最小值)。