你知道哪些数据类型转换方式?
- 自动类型转换(隐式转换):当目标类型的范围大于源类型时,Java会自动将源类型转换为目标类型,不需要显式的类型转换。例如,将int转换为1ong、将float转换为double等。
- 强制类型转换(显式转换):当目标类型的范围小于源类型时,需要使用强制类型转换将源类型转换为目标类型。这可能导致数据丢失或溢出。例如,将long转换为int、将double转换为int等。语法为:目标类型变量名=(目标类型)源类型。
- 字符串转换:Java提供了将字符串表示的数据转换为其他类型数据的方法。例如,将字符串转换为整型int,可以使用Integer.parseInt()方法;将字符串转换为浮点型double,可以使用Double.parseDouble()方法等。
- 数值之间的转换:Java提供了一些数值类型之间的转换方法,如将整型转换为字符型、将字符型转换为整型等。这些转换方式可以通过类型的包装类来实现,例如Character类、Integer类等提供了相应的转换方法。
类型互转会出现什么问题吗?
- 大转小:数据丢失
- 小转大:数据溢出
- 浮点数转换:精度损失
- 类型转换:类型不匹配
为什么用bigDecimal不用double?
double会出现精度丢失,二进制不能准确表示一些如0.1的小数。
Decimal是精确计算。十进制计算,由于浮点数精度丢失,所以使用字符串作为参数,而不是直接使用浮点数值。
System.out.println(0.05 + 0.01);//double浮点计算,精度丢失
BigDecimal num1 = new BigDecimal("0.1");//decimal传入字符串,十进制保证精度