Java中的隐式转换和强制转换底层是怎么做的? 目录一. 回顾数值型基本数据类型共有哪些二. 什么时候进行隐式类型转换三. 数据类型的隐式转换规则四. 特殊隐式转换规则需牢记五. 隐式转换小练习5.1 byte 与 byte 如何转5.2 intlongdouble 的转换5.3 byteshortlong 的转换六. 强制转换如何转换七. 强制转换有哪些问题一. 回顾数值型基本数据类型共有哪些如下图所示6种数值型和字符型都属于是基本数据类型的范畴他们的关系图如下所示。对于八种基本数据类型而言我们通常会在6种数值型的的数据之间做算术运算它们之前的取值范围大小如图所示二. 什么时候进行隐式类型转换当我们在进行运算时如果参与运算的数据类型不相同例如 int 类型 与 double 类型数据相加减就会先进行类型转换转换成一样的在进行算术计算。三. 数据类型的隐式转换规则当取值范围小的和取值范围大的进行运算时小的会先提升为大的然后再进行计算。四. 特殊隐式转换规则需牢记刚才我说到了当取值范围小的和取值范围大的数据进行运算时小的会先转化成大的然后再进行计算但是 byteshortchar 这三种数据类型它们之间在进行算数运算时都会先统一转换成 int 类型然后再进行计算而不是转换成它们三个之中数据类型最大的这一点需要格外注意。五. 隐式转换小练习5.1 byte 与 byte 如何转如下所示代码问下方运算之后得到的数据类型是什么样的byte b1 10; byte b2 20; 数据类型 result b1 b2;显而易见通过我上面第四点的说明这一点不难得出byte 与 byte 做运算会先统一转换为 int 类型所以最终得到的数据类型是 int 。5.2 intlongdouble 的转换如下所示定义三个分别为 intlongdouble类型的数据做运算得出的结果是什么类型呢int a 10; long b 20L; double c 30; 数据类型 result a b c;首先我们要知道一点运算时从左往右计算的所以我们要一步一步的看。先看 a bint 类型 与 long 类型相加int 会转换为 long 类型所以 a b之后得出的数据类型是 long然后 long 再与 double 做相加long 类型会转换为取值范围更大的 double 类型所以最后得出的数据类型是 double。5.3 byteshortlong 的转换如下所示定义了三个分别为 byteshortlong 类型的数据做运算得出的结果是什么类型byte a 10; short b 20; long c 30L; 数据类型 result a b c;还是和刚才一样byte 与 short 先做运算会统一转换为 int 类型int 类型再与 long 类型做运算int 会先转换为 long 类型所以最后得出的数据类型应该是 long 类型。六. 强制转换如何转换在 Java 种原则是是不允许把一个取值范围大的数据赋值给取值范围小的数据。如果一定要这么做就需要进行强制转换。强制转换的格式也很简单如下图所示我们只需要在被墙砖的数据前面括号内写入希望转换成的数据类型即可。七. 强制转换有哪些问题强制转换有可能会导致数据发生错误。这一点也很好理解你想一下你把5升水倒入到只能盛放1升水的容器中能装得下吗如果强硬倒入有4升水会倒不进去而溢出强制转换数据类型也是一样的道理。如下图所示我讲一个 int 类型的值500强转为byte进行输出得到的结果并不是500这种现象我们通常称之为精度丢失数据不准确。之所以会出现这种情况是因为500已经超出了byte 的最大值在强转的时候会出现数据溢出出现精度不准确。如果我们把上面的 int 500 改为 byte 范围内的任意值我这里改为 50再去做强转就不会出现数据不准确如下所示所以说强转可以转但有可能会导致转换后的数据不准确因此在实际使用的时候要考虑好后果如果能确定墙砖之后数据不会发生溢出导致数据不准确就可以做强转操作。