2.2.3 变量的类型转换
java中一个变量定义出来,它的数据类型是不能改变的,因为它占据的内存空间不能改变。
例如:
int a=22;
a=44.5;
上面这个代码就是错的,因为变量a定义出来是整型,那么它就一直是整型,想赋给它一个小数型,就会报错。除非将小数44.5转换成整数才可以。
java中的数据类型转换分为两种,自动类型转换和强制类型转换。
一、自动类型转换
自动类型转换也叫隐式转换,指的是两种数据类型在转换的过程中不需要显式地进行声明,由编译器自动完成。
例如:
short a=22;
int b=2;
上面的代码中,先定义一个短整型变量 a,然后将 a 的值赋给整型变量 b,short 型的数据存入 int 型变量,计算机会自动将 short 型转换成 int 型,这里发生了自动类型转换。
注意:
- 自动类型转换遵循从低到高的原则:byte , short , char —> int —> long—> float —> double
- 布尔型不能转换
二、强制类型转换
如果想从高到低转换,或者将不匹配的数据 类型转换,就需要强制类型转换,也叫 显式转换。
例如:
long a=444455556666L;
int b=a;
这里想将长整型数据赋给整型变量,就会报错,修改一下:
long a=444455556666L;
int b=(int)a;
这样就会将长整型数据强制转换成整型,再赋给变量b。
但是如果输出一下转换后的值:
System.out.println(b);
输出的结果是:
2073925178
这个值与原值完全不一样,这是因为原来的长整型是一个占8个字节空间的数据,强制转换成整型时,计算机会将高位的四个字节直接砍掉,无论这四个字节里有没有数据,只剩下低四个字节的数据放进整型变量里去,这就会导致数据失真,在强制类型转换时需要注意。
但是也不是全部都会失真,例如:
long a=444L;
int b=(int)a;
System.out.println(b);
这里的输出是:
444
当长整型的数据并不大,没有超出整型的取值范围(高位四个字节没有值)时,强制转换就不会失真。