强制类型转换

当把高级别(即占用存储空间较大)的数据类型赋值给低级别(即占用存储空间较小)的数据类型时,必须进行的强制类型转换。其语法格式如下:

(类型)(表达式)

类型是要转换成的目标类型,例如intshortdouble等。表达式是要转换的目标数据,它可以是任何基本类型的算术运算表达式。

例如:

long num=900L;                              // 900

short snum=(short)num;                  // 900

long类型的数值900没有超过short类型的取值范围,所以short类型的变量“snum”完全容纳了强制类型转换后的数值。

基本数据类型的强制类型转换需要注意数据完整性的问题,当把高级的数据类型强制转换为低级的数据类型时,如果数值超出低级数据类型的取值范围,数值将被截取,导致数据丢失、不完整。

例如:

short snum=516;                 // 516

byte bnum=(byte)snum;           // 4

snumshort类型,数据长度是16位,而bnumbyte类型,长度为8位。当snum强制转换为byte类型时,数值“516超出了byte类型的取值范围,这是只能从short类型截取低8为的数据赋值给byte类型的bnum变量。如图1所示。

1  short转换为byte时必须截取数据

这样就造成了数据丢失,所以在使用强制数据类型转换时,一定要倍加小心。

注意boolean布尔型的数值不能被牵制类型转换为其他数据类型,反之亦然。

long类型数值强制类型转换为其他数据类型

 

public class PConversion {

      public static void main(String[] args) {

            long num=33333;

            System.out.println("原数是:"+num);

            System.out.println("转成int"+(int)num);

            System.out.println("转成short"+(short)num);

            System.out.println("转成byte"+(byte)num);

            System.out.println("转成float"+(float)num);

            System.out.println("转成char"+(char)num);

      }

}

 

实例运行结果如图2所示。

2  实例运行结果