数据类型转换分为隐式转换和显式转换,根据不同的转换对象,来确定是那种类型的转换。
隐式转换:就是系统默认的、不需要加以声明就可以进行转换。
首先来说在程序语言中默认的类型,一般整数是int类型 ,浮点数(3.14),默认就是double类型。但是还有其他类型的,例如整数类型的long,浮点数的float。当相同类型之间相遇的时候,就会出现隐式转换的问题。
那么隐式转换的规则就是根据数据类型从小到大的转换:
byte→short→int→long(整数类型)
例如:
long num1 = 100;这个num1根据类型命名为long整数型,但是右侧的100在程序语言中默认为是int整数类型。然而根据隐式转换规则,int类型可以自动的转换为long整数类型。故而在程序运行的时候不会出现错误。
float→double(浮点数)
例如:
double num1 = 2.5F(F在这里代表是float类型的意思);这个同上复述。num1是double类型,但是2.5F是float类型,因为符合隐式转换的规则,所以2.5F会自动的转换为双精度类型,2.50.
显示转换:当系统默认转换不能转换的时候,而我们又需要把某一类型改为另一个类型,这个过程我们称之为显示转换也叫做强制转换。
例如:
double类型转换成int类型,如int num1 = 3.14(3.14默认为double类型)int是整数型,是不带小数点的,然而在double类型中是带小数点之后两位的,如果要想让这行代码成立,则需要强制转换,在不同的程序语言中有不同的方法,这里是用java语言来说明的,int num1 = (int)3.14;只要如此写,在程序中这行代码就可以运行。
精度丢失:
然而在这样情况下,会出现一个比较常见的问题,也是经常会遇见的错误,精度丢失,就是3.14double类型的转换到int类型之后,就只剩下了一个3,变为整数型。这不是四舍五入的套路,你就是3.99,也是会成为int类型的3,因为是精度丢失,就是没有了,所以不要想其它的。这也是强制转换的一个后续问题,当然不单单是这两个类型可以强制转换,一些常见的类型都是可以的。
当隐式转换(自动转换)不能解决问题的时候,可以尝试使用显示转换(强制转换),但是需要注意的是,精度丢失的问题是否影响结果,如果影响,请注意哦。