Java类型转换

转换规则

  • 八种基本数据类型当中除布尔类型之外的7种类型之间都可以互相转换
  • 小容量向大容量转换,称为自动类型转换,容量从小到大排序:
    byte < short < int < long < float < double < char
    注:任何浮点类型不管占用多少个字节,都比整数容量大。char和short可表示的种类数量相同,但是char可以取更大的正整数
  • 大容量转换为小容量,叫做强制类型转换,需要加强制类型转换符,程序才能编译通过,但是在运行阶段可能会损失精度,所以谨慎使用。
  • 当整数字面值没有超过byte,short,char的取值范围,可以直接赋值给byte,short,char类型的变量。
  • byte,short,,char混合运算的时候,各自先转换成int类型在做运算。
  • 多种数据类型混合运算,先转换成容量最大的那种在做运算。

①. Int a=10.8;//数据精度丢失警告。结果为10——自动类型转换

②. Int a=(int)10.8;//无警告。把10.8强制转换为整型——强制类型转换

③. Double c=10.6+6//结果为16.600000。即把6转为6.000000后再参与运算。

在计算机中,拿两个数值进行运算,则运算符两边的数值需要类型相同,如果不同则进行自动类型提升。

④. 参与运算的两个数是什么类型,那么其结果就是什么类型。
int a=10/3结果为3,double b=10/3结果为3.000000;
double c=10.0/3结果为3.333333。要求精确值可以进行强制类型转换。
double d=(double)3/2把3转换为double类型变为3.000000,之后2进行自动类型提升转变为2.000000参与运算,结果为1.500000。
也可以写成3/(double)2。这种情况需要注意与对整体进行强制转换的区别 double e=(double)(3/2)是先计算3/2的值为1再对1进行强制类型转换,结果为1.000000。

优先级问题:

byte h = (byte)(int)g / 3
// 先将g转换为int,又将int类型的g转换为byte类型,再运算g/3。运算后的结果为int类型,所以再赋值给byte类型的h时会出现精度损失的问题。
正确的应该是:byte h = (byte)(int)(g / 3)

原文地址:https://www.cnblogs.com/yu011/p/12632530.html