1.自动类型转换
Java中的自动类型转换就好比将小瓶水倒入到大瓶的换装过程。我们将小瓶水倒入到大瓶中时,由于小瓶的容量比大瓶的容量小,所以倒入的水永远不可能溢出大瓶。同样,在Java中,将取值范围小的数据类型的变量值赋值给取值范围大的数据类型的变量时,程序也不会出现任何问题。
2.强制类型转换
public class Example02 {public static void main(String[] args) {byte a; // 定义byte类型的变量aint b = 298; // 定义int类型的变量b,其表现形式是十六进制a = (byte) b;System.out.println("b=" + b);System.out.println("a=" + a);}}
出现这种现象的原因是,变量b为int类型,在内存中占用4个字节,而byte类型的数据在内存中占用1个字节,当将变量b的类型强转为byte类型后,前面3个高位字节的数据已经丢失,这样数值就发生了改变。int类型转byte类型的过程如图5所示。
多学一招:表达式类型自动提升
byte、short和char类型的变量在运算期间类型会自动提升为int,然后再进行运算。程序编译报错,此时就需要进行强制类型转换。
public class Example03 {public static void main(String[] args) {byte b =3;short s =4;char c =5; //将byte、short、char类型数值相加,再赋值给byte类型byte b2 = b+s+c; System.out.println("b2=" + b2);}}
要解决文件3中的错误,必须要将文件3中第5行的代码修改为:
byte b2 = (byte) (b+s+c);