Java中的数据类型转换分为自动的和强制的。
自动转换:
一般来说从表示范围小的类型,转向表示范围大的类型,是可以进行自动转换的,具体顺序为: byte -> short (char)-> int -> long -> float -> double
会进行自动转换的场合包括赋值和运算等。
例如 double d = 10;整数10默认为int型,赋值给double型的则自动转换为double。
又例如 x = 10/3.0;运算时自动转换为表达式中范围最大的数据类型,则10自动转换为10.0,运算结果为3.33,这里需要注意的是,如果是 x = 10/3 ;则结果为3,因为表达式中范围最大的为int型 ,则结果为int,自动舍去余数1.
另外,byte、short、char 进行运算后,结果自动转换为int,如 byte 型 + byte 型 = int 型。如果需要结果为 byte 型,需要进行强制转换。
需要强调的是,能够进行自动转换并不代表没有任何损失,例如int和float都是占4个字节,而float表示范围能够比int大,是因为有几位用来保存指数了,那么底数所占用的位数就要对应的少几位,打个比方,一个4位数,1234,也可以表示为1.234乘10的3次方,如果只给四个位置用来保存这个数,那么就只能保存指数3和底数1.23,丢掉了一个精度4。
另外,以上几种类型与String类型相加时,会自动转换为String。
强制转换:
不符合自动转换的顺序的,就需要进行强制转换,当 float 型转换为 int 型时,会舍弃小数位。当 int 转换为 short 时,是取低位,舍弃高位,即只保留低位的两个字节。以此类推。
补充:比较运算符&&,若左侧为false,则不执行右侧的代码,直接返回false,同理,||左侧若为true,则不执行右侧代码。
?:为右结合。