今天聊一聊Java引用类型的强制类型转换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了今天聊一聊Java引用类型的强制类型转换相关的知识,希望对你有一定的参考价值。

实际上基本类型也是存在强制类型转换的,这里简单提一下。概括来讲分为两种:

  1、自动类型转换,也叫隐式类型转换,即数据范围小的转换为数据范围大的,此时编译器自动完成类型转换,无需我们写代码

  2、强制类型转换,也叫显式类型转换,即数据范围大的转换为数据范围小的,此时数据会损失精度,强转也需要我们书写代码来实现,使用需谨慎

下面我们来看看,引用类型的强制类型转换:

  同样分两种:隐式和显式

  1、隐式强转,就是父类的引用指向子类的对象,例如 Father类和Child类,我们可以这样写:

    Father f = new Child();

    对于子类和父类我们可以理解为子类是继承了父类的所以功能比父类多

    通俗理解就是子类转父类,没毛病!

    需要注意的是Child对象在内存中类型依然是Child

  2、显式强转,显式强转会出现2种情况:

      ①父类的引用指向子类的对象

      Father f = new Child(); 

      此时Child c = (Child)f ; 父类转子类是可行的,可以这样理解:f 的引用本身就是指向child类的对象,所以把 f 强制转换成 Child是可以的

      ②父类的引用指向的是父类自己的对象:

      Father f = new Father();

      此时Child c  =  (Child)f ;父类转子类是不可行的,运行时会抛出ClassCastException异常,即类型不兼容

以上是关于今天聊一聊Java引用类型的强制类型转换的主要内容,如果未能解决你的问题,请参考以下文章

聊一聊Java 泛型中的通配符 T,E,K,V,?

聊一聊-JAVA 泛型中的通配符 T,E,K,V,?

JS在if中的强制类型转换

Java基础之数据比较IntegerShortintshort

聊一聊-JAVA 泛型中的通配符 T,E,K,V,?

malloc与free简单使用