JAVA中的类型自动转换机制
1、概述
自动类型转换也叫隐式类型转换
-
表达式的数据类型自动提升
所有的byte型、short型和char的值将被提升到int型。
如果一个操作数是long型,计算结果就是long型;
如果一个操作数是float型,计算结果就是float型;
如果一个操作数是double型,计算结果就是double型。
2、数据类型只会自动提升,不能自动降低
-
int值可以赋值给long、float、double型变量,不能赋值给byte、short、char型变量
-
对于函数的传参也是一样
-
当然,在有函数重载的情况下,java编译器会自动选择最匹配的函数进行调用
3、Java中整数默认的数据类型是int类型
-
所有长度低于int的类型(byte、short、char)在运算之后结果将会被提升为int型
-
当然还有以下的这种情况,这种情况是因为我们在进行赋值运算的时候,java编译器可以明确知道运算的结果是否超过byte或short的取值范围,所以 byte a = 1 + 1; 并没有报错。而上面 byte c = a + b; 编译出错的原因是因为a和b均为一个变量,相加的结果是否会超过byte的取值范围编译器并不知道,所以编译器将结果提升为int型了。
4、结论
当编译器明确知道整数的运算结果没有到达int的表示范围时,byte、short或char类型的运算结果不会被自动提升为int类型
当编译器明确知道或不清楚整数的运算结果是否到达int的表示范围时,编译器将会自动将运算的结果转换成int,即使原来是byte、short或char类型。