捯饬一下Java类型转换

日常开发过程中,我们经常会遇到基本数据类型的转换,今天就来稍微总结一下Java的类型转换。

1.自动类型转换(隐式转换)

基本数据类型:

Java的基本数据类型可以按照从低位到高位自动转换,但从高位到低位需要强制转换。

注意几点:
  • 布尔型和其它基本数据类型之间不能相互转换;
  • char可转换为int、long、float和double,其他类型不能转换为char;
  • 从低到高的排序为:byte->short->int->long->float->double;


    类型转换图
理解:

我们都知道数值型类型主要区别是分配的内存空间大小不同,杯中水倒入桶中,自然不会有问题;但是桶中水倒入杯中就可能会溢出。如下图:


桶转杯会溢出

引用数据类型:

①. 基本类型可以和其对应的包装类自动转换,即自动装箱和拆箱。

什么是自动拆箱和装箱?

简单一点说,装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自动将包装器类型转换为基本数据类型

例:

 //自动装箱
 Integer num = 99;
 
 //自动拆箱
 int numprim = num;
 

②. 子类能直接转换为父类或接口类型:子类就是父类。
如:

Animal cat = new Cat();

③. 父类转为子类时要强转,但是在运行时若与实际对象不对应,会抛异常ClassCastException。


2.强制类型转换(显式转换)

基本数据类型:

很多时候我们会用到类型需要从高到低进行转换的场景,比如你需要将 double 型的值赋给一个 int 型的变量,你将怎么办?
这样数据是不会进行自动转换的,因为double型的范围比int型大,此时就需要进行强制转换。

例:

int a = 3;
double b = 5.0;
a = (int)b;
注意:
  • char 类型比较特殊,char 自动转换成 int、long、float 和 double,但 byte 和 short 不能自动转换为 char,而且 char 也不能自动转换为 byte 或 short。
  • 在强制类型转换中,如果是将浮点类型的值转换为整数,直接去掉小数点后边的所有数字;而如果是整数类型强制转换为浮点类型时,将在小数点后面补零。

引用数据类型:

注意若转换后在运行时实际不是对应的对象,会抛出ClassCastException运行时异常。

Animal animal = new Cat();
Cat cat = (Cat)animal;
理解:

上面我们说了杯中水倒入桶中,自然不会有问题;但是桶中水倒入杯中就可能会溢出,可是桶中水没有超过杯的容积的话,还是可以倒进来的,此时就是所谓的强制类型转换。如下图:


容积允许可互转

你可能感兴趣的:(捯饬一下Java类型转换)