隐式转化
数值类型在内存中直接存储其本身的值,对于不同的数值类型,内存中会分配相应的大小去存储。隐式转换也叫作自动类型转换, 由系统自动完成.从存储范围小的类型到存储范围大的类型.byte ,short,char,->int->long->float->double,其中其中,(byte型不能自动提升到char,char不能自动提升到short(强制转换不影响)。)byte ,short,char都会自动提升到int类型进行计算。
强制转换
当我们需要将数值范围较大的数值类型赋给数值范围较小的数值类型变量时,由于此时可能会丢失精度(1讲到的从int到k型的隐式转换除外),因此,需要人为进行转换。我们称之为强制类型转换。强制转换需要加转换符。如果强制转换超出了被赋值类型取值的范围就可以出现,与我们期望的值不同的结果。
Demo代码:
class Test{
public static void main( String[] args){
// 隐式转换
int a = 5;
byte b = 6;
a = a + b ; //先是byte b 系统自动提升为int类型,在计算结果为11,最后在赋值给int类型的a
System.out.println(a);//结果为11
// 强制转换
int c = 5 ;
short d = 6 ;
d = (short)(c + d) ; /* 先是short 类型的d ,自动提升为int类型,计算结果为int类型的11,最后在赋值给
short类型的d,此时就需要强制转换符(short) ,否则会报错 */
System.out.println(d) ; //结果为11
byte e = (byte) (166+454); // 强制转换超出范围 会得到与我们期望不同的值
System.out.println(e); // 结果为108
}
}
注意:在Java中,整数类型(byte/short/int/long)中,对于未声明数据类型的整形,其默认类型为int型。在浮点类型(float/double)中,对于未声明数据类型的浮点型,默认为double型。